LoginSignup
1
1

More than 3 years have passed since last update.

[UE4] キャラクターをランダムな位置に生成させる

Last updated at Posted at 2020-07-18

はじめに

VRのアプリを作成した時に、キャラクターをランダムな位置に生成させる処理を作成したので、作り方の記事を書いてみます。UE4.25.1を使用しています。今回作成した処理については特にVRに依存する箇所はありません。完成イメージは以下動画のような感じです。


上記動画では100体のキャラクター生成を実施しているのですが、OulusQuestでは起動時処理が重すぎて固まっており、ちょっと処理能力の限界を超えていたようです(生成後は落ち着くのですが)。

概略仕様

・起動時に、箱型のエリア内のランダムな位置に指定した数のキャラクターを生成する
・エリアは複数配置でき、どのエリアに配置されるかもランダムに決定される

作り方

準備

・使用したいキャラクター(Characterクラスから派生させた、AIコントローラを使用するもの)がいるプロジェクトを用意します。

GameModeのBP作成

今回、GameModeは、ミニマップへの参照を手のコントローラーに渡すために使用します。
・コンテンツブラウザ上で、新規追加=>ブループリントクラスを選択するとダイアログが表示されるので、親クラスとしてGameModeを選択しOKを押します。すでにプロジェクトにGameModeがあるならそちらを使用すればよいので、新規追加はしなくても問題ないです。
・生成されたBPの名前をBP_GameModeに変更し、編集画面を起動します。
・BP_GameModeにSpawnAreaRefArray、SpawnCountの2個の変数を追加します。SpawnCountにはキャラクターを生成する数を設定しておきます(最初は少ない数で試したほうが良いと思います)。
image.png
・ワールドセッティングでBP_GameModeを設定します。

エリア指定のBP作成

・コンテンツブラウザ上で、新規追加=>ブループリントクラスを選択し、表示されるダイアログでActorを押します。
・生成されたBPの名前をBP_SpwanAreaSetに変更し、編集画面を起動します。
・BP_SpwanAreaSetに新規コンポーネント追加でBoxCollisionを追加します。
・BP_SpwanAreaSetのイベントグラフを開いて、以下のようにノードを追加します。
image.png

キャラクター生成処理を追加

・BP_GameModeの編集画面を起動し、イベントグラフを開いて、以下のようにノードを追加します。SpawnActorは、ノードを追加するときにSpawnActorで検索して"クラスからアクタをスポーンします"を選択すると、スポーンアクタNONEという名前のノードができるので、Classのところに生成したいキャラクターを指定すると下記画面のノードのように変化します。SpawnActorでキャラクターを生成するとそのままではAIコントローラーが付かないので、SpawnDefaultActorで付加するようにしています。また、キャラクターを生成するときに失敗するケースがあるので、成功したことを確認してから実行しています。
image.png

エリア指定のBPをマップ上に配置

・BP_SpwanAreaSetをいくつかマップ上に配置し、位置とサイズを適当に調整します。サイズが小さいと、キャラクターの生成に失敗する場合があるので、ある程度大きくしたほうが良いです。

完成

ここまで作成した状態で実行すると、起動時にキャラクターが生成されます。

追記

後で気が付いたのですが、GameModeに依存する処理(Cast)があると、GameModeを切り替えられないのでよくないですね。
GameModeにアクセスするためのインターフェースを定義してこれを経由するのがよさそうです。以下に実装例を示します。
・インターフェースIBP_Gamemodeを作成し、関数AddSpawnAreaを定義します。
・BP_SpwanAreaSetを以下のようにノードを修正します。
image.png
・BP_GameModeにAddSpawnAreaの実装を追加します。
image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1