目次
はじめに
ゲームでは指定した範囲内でランダムに位置を取得してスポーンする仕組みを作ってみます。
入門者向けに詳しく説明しているので結論が知りたい!という方は⑤ランダムにスポーンする処理からお読みください。
環境 : UE5.2.0
個人の備忘録としてまとめています。誤った情報がある場合があります。
コメントにてご指摘のほどお願いいたします。
解説
➀生成用のアクタの作成
コンテンツブラウザ右クリックしてブループリントクラスを作成します。
親クラスにActorを指定します。
名前をB_RandomAreaSpawnerとしました。
②コンポーネントの追加
スポーンする範囲を指定するためのコンポーネントを追加します。
作成したアクタを開き、コンポーネントの追加からBoxCollisionを追加します。
Boxドラッグアンドドロップして新規ルートにします。
こうなったらOK。
このコンポーネントは範囲を指定するためだけに使いたいので、コンポーネントの詳細からコリジョンプリセットをNoCollisionにします。
実行中でも確認できるようにHidden in Gameのチェックを外しておきます。
レベルに配置して、実行し、コリジョンが表示されていれば成功です。
③スポーンするアクタの作成
スポーンするアクタを作成します。
スポーンするものが決まっている方はスキップしても構いません。
コンテンツブラウザ右クリックしてブループリントクラスを作成
親クラスにStaticMeshActorを選びます。
名前をB_SpawnActorにします。
StaticMeshComponentの詳細からConeを選びます。
保存して完了です。
④スポーン処理の作成
B_RandomAreaSpawnerに戻りイベントグラフからカスタムイベントを追加します。
名前をSpawnとしました。
SpawnActorノードを配置します。
生成するClassにB_SpawnActorを選びます。
Transformが空だとエラーをはくのでBoxの位置にスポーンするようにします。
またスケールが大きすぎるので0.1にしておきます。
BeginPlayから作成したSpawnイベントを接続します。
実行して真ん中にスポーンしていれば成功です。
⑤ランダムにスポーンする処理
Spawnイベントを修正します。
特定のボックスの範囲からランダムな位置を取得するにRandomPointinBoundingBoxを利用します。
BoxコンポーネントのBoxExtentを取得してHalfSizeに接続します。
BoxExtentはBoxコンポーネントの形状から編集できます。
形状のLineTicknessの値をあげることで線の太さを変えることができます
これで範囲内のランダムなポイントで生成できるようになりました。
⑥一定間隔でスポーンする
SetTimerbyEventを利用して0.2秒ごとにSpawnイベントを呼ぶようにします。
このままだと無限に生成してしまいメモリがあふれてしまうので、B_SpawnActorに一定時間で自身を消す仕組みを入れておきます。
B_SpawnActorのイベントに5秒たったらDestroyActorを呼びます。
実行すると0.2秒おきに範囲の中にランダムにスポーンします。
BoxExtentの値を変更するとスポーンする範囲を制御できます。
Hidden in Gameのチェックを戻せばゲーム中のコリジョンが非表示になります。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。