環境
・Visual Studio Community 2015
・Unreal Engine4.16
ContentBrowserの話
- Content
- C++ Clsasses
という構成になります。
Content Browser上でアセットを選択すると
Copy Referenceでそのアセットへのパスがクリップボードに保存されます。
図の例では
StaticMesh'/Engine/VREditor/BasicMeshes/SM_Cube_01.SM_Cube_01'
が保存されます。
Unreal C++からアセットをロードする時の注意点
さて、ここからが本題です。
Content以下の自作のAssetをコード上から参照したい場合に詰まったことがあります。
(当時はCopy Referenceの存在を知らなかったので)
今回は下記のスタティックメッシュを参照してみようと思います。
先程と同様にCopy Referenceを行ってみると
StaticMesh'/Game/Sandbox/Meshes/SM_Building.SM_Building'
というようなパスが取得できます。
そこで、気になったのが/Game/Sandbox/という部分です。
Engineのアセットの場合は/Engine/なのですが
Content以下の場合は/Game/となっており/Content/ではありません。
ロードする必要のあるアセットが正確に分かっていて、そのプロパティを初期化時に設定する場合の例です。
header側
private: const FName MeshComponentName = TEXT("Mesh"); UPROPERTY(Category = Actor, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) class UStaticMeshComponent* Mesh; public: ABaseActor(const FObjectInitializer& ObjectInitializer);
cpp側
ABaseActor::ABaseActor(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { static ConstructorHelpers::FObjectFinder<UStaticMesh> buildingMesh(TEXT("/Game/Sandbox/Meshes/SM_Building")); Mesh = CreateOptionalDefaultSubobject<UStaticMeshComponent>(MeshComponentName); if (Mesh == nullptr) return; Mesh->SetStaticMesh(buildingMesh.Object); }
結果
無事にビルのモデルがセットされたActorが出来ました。
余談ですが、Content Browserは4つまで表示出来ます。