以前のリビジョンの文書です
SpawnActorを使います。
レベルブループリントを開いてアクター生成処理を追加します。
これでコンパイルして実行すると、空っぽのアクターが生成される。生成処理自体はこれで完了。ただ、このままでは表示する物体(メッシュ)が無いので追加して表示される様に修正します。SpawnActorで生成するアクターのブループリントを開いてメッシュ―コンポーネントを追加します。
詳細パネルのStatic Meshから好きなメッシュを選択してコンパイルし再生すると表示される様になります。
<sxh cpp; title: AMyGameMode.h> class MYPROJECT_API AMyGameMode : public AGameMode {
GENERATED_BODY()
private:
virtual void BeginPlay() override; // 追加
}; </sxh> BeginPlay 関数をオーバーライドして、その中に生成処理を追加します。
<sxh cpp; title: AMyGameMode.cpp>
#include “MyActor.h” アクター使用 void AMyGameMode::BeginPlay() { Super::BeginPlay(); UWorld* const pWorld = GetWorld(); if (pWorld) { FVector spawnPos = FVector(0.0f, 0.0f, 0.0f); FRotator spawnRot = FRotator::ZeroRotator; AMyActor* pNewActor = pWorld→SpawnActor<AMyActor>( AMyActor::StaticClass(), spawnPos, spawnRot); } } </sxh> この時点でワールドアウトライナーに追加すると空のアクターが生成されます。 次にメッシュを生成し設定します。 まず必要なメンバーを用意して <sxh cpp; title: AMyActor.h> USceneComponent* DummyRoot; TSubobjectPtr<UStaticMeshComponent> MeshComp; </sxh> ファイルを読み込んで、コンポーネントとしてアクターにアタッチする。 <sxh cpp; title: AMyActor.cpp> コンストラクタ AMyActor::AMyActor() {
PrimaryActorTick.bCanEverTick = true;
RunningTime = 0.0f;
// ダミーのルートコンポーネントを追加 DummyRoot = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent")); RootComponent = DummyRoot;
// メッシュコンポーネント作成 MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh")); // メッシュデータ読み込み const ConstructorHelpers::FObjectFinder<UStaticMesh> MeshObj(TEXT("/Game/StarterContent/Shapes/Shape_Cylinder"));
// メッシュ設定 MeshComp->SetStaticMesh(MeshObj.Object); // ルートコンポーネントにアタッチの MeshComp->AttachTo(RootComponent);
}
</sxh> これで表示されます。MeshObjに渡すファイルパスは頭に「/Game」を付けないとロードされないので注意すること。