UnrealEngine奮闘記

アンリアルエンジンでの開発やTIPSをまとめたblogです

インベーダーゲームを作る その7敵の多数配置

今回は敵を多数配置してみます。
これで、かなりインベーダーゲームっぽくなります。
出来上がりは、こんな感じになります。


UE4_tutorial_Inv_01 - YouTube

  • レベルに敵を多数配置する
  • 全ActorをForEachLoopで操作
  • Blueprint間でのやりとり(キャスト方法)
  • キャストでクラスを判別する

レベルに敵を多数配置する

まず、マップに等間隔に敵を配置します。
その後Playを押すと…敵が死にまくると思います。

これは画面端に移動した敵が反転し、隣の敵に衝突する為です。
本来のインベーダーの動きでは、敵がどれか1体画面端に移動すると全敵が反転するため衝突しません。
今回はその様な処理を作成してみます。

全ActorをForEachLoopで操作

全Actorを反転するにはGet All Actors Of ClassとForEachLoopを使用します。
この際にCast To EnemyBlueprintで敵かどうかを調べ、敵であれば反転するようなBlueprintを書きます。

Blueprint間でのやりとり(キャスト方法)

その前に、まず移動方向の反転用に全Actorが参照できる様な変数を用意します。
こういった場合に使うクラスは主に3つ用意されています。

・GameModeクラス:ゲームのルールやシーケンスを記載します。
・GameStateクラス:ゲームの状態を記載します。
・HUDクラス:ゲームのHUD(得点やメニュー等)を記載します。

今回の用途としてはGameStateが近いので、GameStateを基底としたMyGameStateクラスを作成します。

f:id:swiftnest:20140504005848j:plain:w460

変数を作成します。
変数名はDirectionYとし、型はFloatで初期値に1を入れます。

f:id:swiftnest:20140504003540j:plain:w460

上記を組み込んだ反転のソースを「LevelBlueprint」に記載します。
LevelBlueprintについてはその2を確認して下さい。

f:id:swiftnest:20140524113300j:plain:w460

この反転のソース、どこかで見たことがあるかと思います。
第3回でEnemyBlueprintに書いたソースとほぼ同じです。
そこで、EnemyBlueprintから反転部分を削除し、変数DirectionYはMyGameStateから取得するようにします。

f:id:swiftnest:20140504005656j:plain:w460

これで、実行すると敵が衝突せずに反転するようになったかと思います。

キャストでクラスを判別する

ただ、この状態で再生しても、やはり敵が自滅します。
これは敵の弾に敵が当たるためです。

f:id:swiftnest:20140504123615j:plain:w460

そこで敵はプレイヤーの弾しか当たらないようにキャストでチェックします。

f:id:swiftnest:20140610210048j:plain:w460

あとは、チョコチョコとカメラやライトを調整したり、UE4のサンプルから惑星を持ってきたりしました。
他のプロジェクトからアセットを移動させる方法はこちらを参考にしました。
[UE4] 他プロジェクトからアセットを移動させる方法 | historia Inc - 株式会社ヒストリア

次回はHUDによるスコア表示です。