Warning: Declaration of action_plugin_linebreak::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/ue4/wiki/lib/plugins/linebreak/action.php on line 41

Warning: Declaration of action_plugin_markdownextra::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/ue4/wiki/lib/plugins/markdownextra/action.php on line 16

Warning: Declaration of action_plugin_syntaxhighlighter3_action::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/ue4/wiki/lib/plugins/syntaxhighlighter3/action/action.php on line 28
wiki:ue4:tips:503

目次

アクターの生成(4.7.5)

SpawnActorを使います。

ブループリント版

レベルブループリントを開いてアクター生成処理を追加します。

これでコンパイルして実行すると、空っぽのアクターが生成される。生成処理自体はこれで完了。ただ、このままでは表示する物体(メッシュ)が無いので追加して表示される様に修正します。SpawnActorで生成するアクターのブループリントを開いてメッシュ―コンポーネントを追加します。

詳細パネルのStatic Meshから好きなメッシュを選択してコンパイルし再生すると表示される様になります。

C++版

  1. 「コンテンツブラウザ」の「新規追加」から「新規C++ Class…」を選択する。
  2. 親クラスに「Game Mode」を選択して次へ。
  3. 名前を「MyGameMode」として「クラスを作成」する。

 
class MYPROJECT_API AMyGameMode : public AGameMode 
{ 
	GENERATED_BODY() 
	 
private: 
	virtual void BeginPlay() override; // 追加 
}; 
BeginPlay 関数をオーバーライドして、その中に生成処理を追加します。

 

#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); 
	} 
} 

この時点でワールドアウトライナーに追加すると空のアクターが生成されます。
次にメッシュを生成し設定します。

まずアクターに必要なメンバーを用意して

 
USceneComponent* DummyRoot; 
TSubobjectPtr<UStaticMeshComponent> MeshComp; 

ファイルを読み込んで、コンポーネントとしてアクターにアタッチする。

 
// コンストラクタ 
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); 
} 

これで表示されます。MeshObjに渡すファイルパスは頭に「/Game」を付けないとロードされないので注意すること。