UE4ゲーム制作入門十三日目

一人UE4ゲーム制作入門アドベントカレンダー十三日目です。

昨日つくった敵の親クラスを使って、新しい敵を作ります。新しくEnemyクラスの下にRoboフォルダを作ります。Bearフォルダも作ってなかった気がするので作って、入れておきましょう。

BP_Roboを作る


親クラスにしたいブループリントクラスを右クリックし、子クラスを作るを選択します。

子クラス作成

できたブループリントクラスには、BP_Roboという名前をつけておきます。

このBP_Roboクラスは、ほぼすべての処理をEnemyに書かれてるので実装するのは、オーバーライドした関数Attack以外にありません。

BP_Roboのイベントグラフ

敵の弾を作る


Attackで飛ばす弾を作ります。といっても、プレイヤーフォルダに有るBP_Shotoを複製、またはコピーアンドペーストし、Roboフォルダに入れます。

同じ色だとわかりにくいので違う色のマテリアルを作って設定します。

ShotE.png

BP_RoboAIを作る


AIコントローラとビヘイビアツリーも新しく作り直します。今回のロボは、配置した位置から移動しません。プレイヤーを見つけたら、そちらに向き、一定間隔で弾を撃ち出す固定砲台です。

AIコントローラから行きます。ブループリントクラスから、AIコントローラを作ったら開きます。BeginPlayでブラックボートとビヘイビアツリーを設定します。この2つは後で作ります。

BP_RoboAI.png

そして、プレイヤーを探すSearchPlayr関数です。サービスで似たようなものを作りましたが、必要のない処理もあって動かなかったため、こっちに新しく作り直しました。

処理としては単純に、合わせて作った変数SearchRangeの範囲内にプレイヤーが入ってるかどうかの結果を返しています。trueだろうがfalseだろうがPlayerPawnを返します。このあたりはサービスのSearchPlayerと変わりません。

SearchRangeの値はここでは800に設定しています。

BP_RoboAI2

BT_RoboとBB_Roboをつくる


クマのときと同じように、ビヘイビアツリーを作ります。その後、新規ブラックボードを作成し、それをルートノードからアタッチします。

まずはビヘイビアツリーの全体です。大体クマと一緒ですが、いくつか変えてあります。

攻撃側と索敵側で分けて説明します。

RoboAIのビヘイビアツリー

攻撃


索敵側で、プレイヤーを見つけられていたらこちらに回ってきます。

LookAtTargetタスクではセットされたターゲットアクターを向き続けます。

BP_RoboAIのLookAtRotationタスク

Shotタスクでは、BP_EnemyのAttackクラスを実行しています。Shotと銘打ってますが、BP_Enemyの子クラス全部で使えそうですね。今気づきました。

そして、実行後は5秒間のクールタイムです。初期値が5秒なだけなので、好きな値にしてもいいですが、0にしたら大変なことになるのでやめておいたほうが身のためです。

BP_RoboAIのShotタスク

索敵


男らしくタスクは一つだけ。プレイヤーが索敵範囲内かどうかを調べるそれだけです。AIに実装したSearchPlayerでtrueなら一緒に帰ってきたPlayerのインスタンスをブラックボードのTargetPawnに与えます。

範囲外であるfalseなら空っぽにしてやり、攻撃側の実行がされないようにします。

BP_RoboAIのSearchPlayerタスク

完成


これでワールドに配置して、索敵範囲内にプレイヤーが入ると、こちらを向いて弾を撃ってくれば成功です。