LoginSignup
2
3

More than 1 year has passed since last update.

【UE5】敵キャラやアイテムをランダムに沢山スポーンしたい!

Last updated at Posted at 2023-04-18

完成イメージ

完成イメージはアイテムだと下のような感じ,

ファイル名

キャラクターだと下のような感じになります!
(敵キャラを召喚するシーンとかにどうでしょうか?)

ファイル名

環境

Unreal Engine 5.1.1(日本語)

BulePrint

BPは下のリンクからコピーできます.
時間がない人はコピペしてパラメータや変数をセットすれば動くようになってます!

はじめに

アイテムをランダムに沢山配置するだけのページは結構見つかったんですが
スポーンしたキャラクターのアニメーションが止まったりして
困ったので備忘録も兼ねて記事を書こうと思います!

目的

アクタ(アイテムなどのオブジェクト)やキャラクター(敵キャラなどの移動可能なMob)を
できるだけシンプルかつ簡単に指定した範囲にランダムに指定した数配置すること

方法

スポーンさせるキャラクタの用意

まずはコンテンツブラウザで右クリックしてブループリントクラスを選択します,
image.png
Characterを選択します.

動かないアイテムなどのオブジェクトの場合でもCharacterを選択することをオススメします!
コントローラ関連を簡単に済ませるため,この後でSpawn AIForm Classを使うためです.
自分で解決できる方はぜひActorなどで試してみてください!

image.png
今回は,キャラクタ(アニメーションつき)はMetaHumanを使って下のような感じに,
image.png
アイテムはCubeに光るマテリアルをセットして下のような感じにしてみました!
image.png

キャラクタやアイテムは自分で好きなものを用意してみてください!

ここまで出来たら次はスポーンエリアを決めるアクタを作っていきます.

スポーンエリアを決めるアクタの作成

まずはコンテンツブラウザで右クリックしてブループリントクラスを選択します,
image.png
アクタを作成します.
image.png
今回は名前をSpawnAreaとしました.
image.png
作成したアクタをダブルクリックして編集画面を開き,コンポーネントの追加からBox Collisionを追加します.
image.png
追加できたら一度コンパイルしましょう.
イベントグラフタブに移動してカスタムイベントを追加します.
カスタムイベントの名前はSpawnとしました.
image.png

スポーンするBPの作成

ここからがこの記事のメインになります!
オブジェクトやキャラクタをスポーンさせるためのSpawn AIForm Classノードを作成します.
Pawn Classには先ほど用意したCharacterオブジェクトをセットします.
Behacior Treeには今回は何もセットしません.

もしキャラクタの行動をセットしたい場合にはBehacior Treeに用意したものをセットします.

image.png
どこにキャラクタをスポーンさせるか決めるLocationにはアクタのBoxの内側の座標からランダムに選択することにします.
BoxCollisionコンポーネントからGetComponentBoundsノードで当たり判定を取得してRandompointBoundingBoxノードでランダムに一点の座標を選びます.

キャラクタのスポーンしたときの向きを決めるRotaionにはRandomRotatorノードでランダムな回転をセットします.

この辺りは用途に合わせて変更してみてください!

image.png
このままだと一回のイベントにつき1つのキャラクタしかスポーンしないのでループをつなげておきます.
LastIndexにお好みの回数をセットしてください.今回は5回にしました.
image.png
これでおおまかにキャラクタをスポーン出来るようになったのでイベントを呼び出す機能を作成してみましょう.
EventBeginPlayノードを引き出して,SetTimerByEventノードを繋げます.
今回は3秒に1回スポーンすることにしたいのでTime3.0をセットしておきます.
Eventを先ほど作成したSpawnAreaとつなげておきます.

あまり短い頻度でスポーンするようにするとエディタがかなり重くなるので気を付けてください!

image.png

上記のBPでキャラクタをスポーンさせていると,たまに指定した数より少ない数しかスポーンしません.
これは既にスポーンしているキャラクタとスポーン位置が被ったりしているときにスポーンしないようになっているためです.
スポーンに失敗したらリトライしてほしいので失敗したらループする機能を付けます.

まず,失敗した回数をカウントする変数を作成します.
今回はMissCountという名前を付けました.
image.png
Spawn AIForm ClassノードのあとにIs Validノードをつなげてスポーンしたオブジェクトが存在するか(=スポーンに成功したか)を確認します.
スポーンに失敗していたらMissCountをインクリメント(+1)します.
50回以上失敗しているとしたらスポーンするエリアが何かにふさがれているなど何かしら問題が起きていると判定してエラーメッセージを出力して次のループにいくようにします.
image.png

これでキャラクタをスポーンするアクタのBPが出来ました!

アクタの配置

キャラクタをスポーンさせたい位置に先ほど作成したSpawnAreaアクタを配置します.
ボックスのサイズを拡大してスポーンしてほしい範囲まで広げます.
image.png

これで完成です!実行してみましょう!

おわりに

最後まで読んでいただきありがとうございます!

初投稿なので色々足りない点があるかと思いますが,何か気づいことがあったらコメントや編集リクエストなどでコッソリ教えてください....

それから,Twitterをやってるのでもしよければフォローしていってください!
↓ 今回の記事の内容を実行したときのツイート

2
3
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
2
3