😅
[UE5][C++] StaticMeshComponent追加ができない?
概要
症状は以下のような形です。
詳細ビューから見ると、
追加したStaticMeshComponentやそれに設定したStaticMeshが見える状態でした。
StaticMeshComponent(WeaponMeshComp)のコリジョン設定が見える...
ただ、Viewport上には一切メッシュが映っていませんが...という状態です。
サイズが物凄い小さいとか、変な位置にあるとかでもない。
この辺りからハマったな...という感じがひしひしとしてきました。
コード比較
まずは追加に失敗したコード・成功したコードを記載します。
▼ 失敗したコード例
//MeshComponentを作成して、メッシュをセット
WeaponMeshComp = NewObject<UStaticMeshComponent>();
//アタッチ処理
WeaponMeshComp->AttachToComponent(RootComponent, FAttachmentTransformRules::SnapToTargetIncludingScale, WeaponItem->AttachToSocketName);
//メッシュ設定
if(WeaponItem->WeaponMesh.IsValid())
WeaponMeshComp->SetStaticMesh(WeaponItem->WeaponMesh.Get());
//レンダリングされるように
WeaponMeshComp->RegisterComponent();
//プライマリアセットからのオフセット
WeaponMeshComp->SetRelativeTransform(WeaponItem->AttachToTransform);
#if WITH_EDITORONLY_DATA
//詳細ビューから見えるように。
AddInstanceComponent(WeaponMeshComp);
#endif
▼ 成功したコード例
//MeshComponentを作成して、メッシュをセット
WeaponMeshComp = NewObject<UStaticMeshComponent>(this,"WeaponMesh");
//アタッチ処理
WeaponMeshComp->AttachToComponent(RootComponent, FAttachmentTransformRules::SnapToTargetIncludingScale, WeaponItem->AttachToSocketName);
//メッシュ設定
if(WeaponItem->WeaponMesh.IsValid())
WeaponMeshComp->SetStaticMesh(WeaponItem->WeaponMesh.Get());
//レンダリングされるように
WeaponMeshComp->RegisterComponent();
//プライマリアセットからのオフセット
WeaponMeshComp->SetRelativeTransform(WeaponItem->AttachToTransform);
#if WITH_EDITORONLY_DATA
//詳細ビューから見えるように。
AddInstanceComponent(WeaponMeshComp);
#endif
何が原因かお分かりいただけましたでしょうか?
そうOuterの設定が非常に大事でした!
//MeshComponentを作成して、メッシュをセット
WeaponMeshComp = NewObject<UStaticMeshComponent>(this,"WeaponMesh");
この引数でthis(キャラクター)をOuterとして渡しているのですが、
これが非常に重要でこれがないと表示されません。
基本今まではBP上で追加したり、
CreateDefaultSubobject関数をコンストラクタで使って追加したりで
そんなことは意識したことがなかったので、完全に盲点でした。
まとめ
これは分からないって...(笑)
まだまだ勉強不足だなと実感する事件でした。
ちなみに、RegisterComponentで登録しておかないと、
追加したStaticMeshComponentが表示されないので、
お気を付けください。
※意外となじみがない関数ではあるかと思ったので
Discussion