完成イメージ
完成イメージはアイテムだと下のような感じ,
キャラクターだと下のような感じになります!
(敵キャラを召喚するシーンとかにどうでしょうか?)
環境
Unreal Engine 5.1.1(日本語)
BulePrint
BPは下のリンクからコピーできます.
時間がない人はコピペしてパラメータや変数をセットすれば動くようになってます!
はじめに
アイテムをランダムに沢山配置するだけのページは結構見つかったんですが
スポーンしたキャラクターのアニメーションが止まったりして
困ったので備忘録も兼ねて記事を書こうと思います!
目的
アクタ(アイテムなどのオブジェクト)やキャラクター(敵キャラなどの移動可能なMob)を
できるだけシンプルかつ簡単に指定した範囲にランダムに指定した数配置すること
方法
スポーンさせるキャラクタの用意
まずはコンテンツブラウザで右クリックしてブループリントクラスを選択します,
Character
を選択します.
動かないアイテムなどのオブジェクトの場合でもCharacter
を選択することをオススメします!
コントローラ関連を簡単に済ませるため,この後でSpawn AIForm Class
を使うためです.
自分で解決できる方はぜひActorなどで試してみてください!
今回は,キャラクタ(アニメーションつき)はMetaHumanを使って下のような感じに,
アイテムはCubeに光るマテリアルをセットして下のような感じにしてみました!
キャラクタやアイテムは自分で好きなものを用意してみてください!
ここまで出来たら次はスポーンエリアを決めるアクタを作っていきます.
スポーンエリアを決めるアクタの作成
まずはコンテンツブラウザで右クリックしてブループリントクラスを選択します,
アクタを作成します.
今回は名前をSpawnArea
としました.
作成したアクタをダブルクリックして編集画面を開き,コンポーネントの追加からBox Collision
を追加します.
追加できたら一度コンパイルしましょう.
イベントグラフタブに移動してカスタムイベントを追加します.
カスタムイベントの名前はSpawn
としました.
スポーンするBPの作成
ここからがこの記事のメインになります!
オブジェクトやキャラクタをスポーンさせるためのSpawn AIForm Class
ノードを作成します.
Pawn Class
には先ほど用意したCharacter
オブジェクトをセットします.
Behacior Tree
には今回は何もセットしません.
もしキャラクタの行動をセットしたい場合にはBehacior Tree
に用意したものをセットします.
どこにキャラクタをスポーンさせるか決めるLocation
にはアクタのBoxの内側の座標からランダムに選択することにします.
BoxCollisionコンポーネントからGetComponentBounds
ノードで当たり判定を取得してRandompointBoundingBox
ノードでランダムに一点の座標を選びます.
キャラクタのスポーンしたときの向きを決めるRotaion
にはRandomRotator
ノードでランダムな回転をセットします.
この辺りは用途に合わせて変更してみてください!
このままだと一回のイベントにつき1つのキャラクタしかスポーンしないのでループをつなげておきます.
LastIndexにお好みの回数をセットしてください.今回は5回にしました.
これでおおまかにキャラクタをスポーン出来るようになったのでイベントを呼び出す機能を作成してみましょう.
EventBeginPlay
ノードを引き出して,SetTimerByEvent
ノードを繋げます.
今回は3秒に1回スポーンすることにしたいのでTime
に3.0
をセットしておきます.
Event
を先ほど作成したSpawnArea
とつなげておきます.
あまり短い頻度でスポーンするようにするとエディタがかなり重くなるので気を付けてください!
上記のBPでキャラクタをスポーンさせていると,たまに指定した数より少ない数しかスポーンしません.
これは既にスポーンしているキャラクタとスポーン位置が被ったりしているときにスポーンしないようになっているためです.
スポーンに失敗したらリトライしてほしいので失敗したらループする機能を付けます.
まず,失敗した回数をカウントする変数を作成します.
今回はMissCount
という名前を付けました.
Spawn AIForm Class
ノードのあとにIs Valid
ノードをつなげてスポーンしたオブジェクトが存在するか(=スポーンに成功したか)を確認します.
スポーンに失敗していたらMissCount
をインクリメント(+1)します.
50回以上失敗しているとしたらスポーンするエリアが何かにふさがれているなど何かしら問題が起きていると判定してエラーメッセージを出力して次のループにいくようにします.
これでキャラクタをスポーンするアクタのBPが出来ました!
アクタの配置
キャラクタをスポーンさせたい位置に先ほど作成したSpawnArea
アクタを配置します.
ボックスのサイズを拡大してスポーンしてほしい範囲まで広げます.
これで完成です!実行してみましょう!
おわりに
最後まで読んでいただきありがとうございます!
初投稿なので色々足りない点があるかと思いますが,何か気づいことがあったらコメントや編集リクエストなどでコッソリ教えてください....
それから,Twitterをやってるのでもしよければフォローしていってください!
↓ 今回の記事の内容を実行したときのツイート