この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
wiki:ue4:tips:503 [2015/04/25 05:16] step |
— (現在) | ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | ====== アクターの生成(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」として「クラスを作成」する。 | ||
| - | |||
| - | <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」を付けないとロードされないので注意すること。 | ||