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
====== アクターの生成(4.7.5) ======
SpawnActorを使います。
===== ブループリント版 =====
レベルブループリントを開いてアクター生成処理を追加します。
{{:wiki:ue4:tips:ue4_spawn_actor_bp_01.png?300|}}
これでコンパイルして実行すると、空っぽのアクターが生成される。生成処理自体はこれで完了。ただ、このままでは表示する物体(メッシュ)が無いので追加して表示される様に修正します。SpawnActorで生成するアクターのブループリントを開いてメッシュ―コンポーネントを追加します。
{{:wiki:ue4:tips:ue4_spawn_actor_bp_02.png?300|}}
詳細パネルのStatic Meshから好きなメッシュを選択してコンパイルし再生すると表示される様になります。
{{:wiki:ue4:tips:ue4_spawn_actor_bp_03.png?300|}}
===== C++版 =====
- 「コンテンツブラウザ」の「新規追加」から「新規C++ Class…」を選択する。
- 親クラスに「Game Mode」を選択して次へ。
- 名前を「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::StaticClass(),
spawnPos,
spawnRot);
}
}
この時点でワールドアウトライナーに追加すると空のアクターが生成されます。
次にメッシュを生成し設定します。
まずアクターに必要なメンバーを用意して
USceneComponent* DummyRoot;
TSubobjectPtr MeshComp;
ファイルを読み込んで、コンポーネントとしてアクターにアタッチする。
// コンストラクタ
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
RunningTime = 0.0f;
// ダミーのルートコンポーネントを追加
DummyRoot = CreateDefaultSubobject(TEXT("RootComponent"));
RootComponent = DummyRoot;
// メッシュコンポーネント作成
MeshComp = CreateDefaultSubobject(TEXT("Mesh"));
// メッシュデータ読み込み
const ConstructorHelpers::FObjectFinder MeshObj(TEXT("/Game/StarterContent/Shapes/Shape_Cylinder"));
// メッシュ設定
MeshComp->SetStaticMesh(MeshObj.Object);
// ルートコンポーネントにアタッチの
MeshComp->AttachTo(RootComponent);
}
これで表示されます。MeshObjに渡すファイルパスは頭に「/Game」を付けないとロードされないので注意すること。