UE4ゲーム制作入門十三日目
一人UE4ゲーム制作入門アドベントカレンダー十三日目です。
昨日つくった敵の親クラスを使って、新しい敵を作ります。新しくEnemyクラスの下にRoboフォルダを作ります。Bearフォルダも作ってなかった気がするので作って、入れておきましょう。
BP_Roboを作る
親クラスにしたいブループリントクラスを右クリックし、子クラスを作るを選択します。
できたブループリントクラスには、BP_Roboという名前をつけておきます。
このBP_Roboクラスは、ほぼすべての処理をEnemyに書かれてるので実装するのは、オーバーライドした関数Attack以外にありません。
敵の弾を作る
Attackで飛ばす弾を作ります。といっても、プレイヤーフォルダに有るBP_Shotoを複製、またはコピーアンドペーストし、Roboフォルダに入れます。
同じ色だとわかりにくいので違う色のマテリアルを作って設定します。
BP_RoboAIを作る
AIコントローラとビヘイビアツリーも新しく作り直します。今回のロボは、配置した位置から移動しません。プレイヤーを見つけたら、そちらに向き、一定間隔で弾を撃ち出す固定砲台です。
AIコントローラから行きます。ブループリントクラスから、AIコントローラを作ったら開きます。BeginPlayでブラックボートとビヘイビアツリーを設定します。この2つは後で作ります。
そして、プレイヤーを探すSearchPlayr関数です。サービスで似たようなものを作りましたが、必要のない処理もあって動かなかったため、こっちに新しく作り直しました。
処理としては単純に、合わせて作った変数SearchRangeの範囲内にプレイヤーが入ってるかどうかの結果を返しています。trueだろうがfalseだろうがPlayerPawnを返します。このあたりはサービスのSearchPlayerと変わりません。
SearchRangeの値はここでは800に設定しています。
BT_RoboとBB_Roboをつくる
クマのときと同じように、ビヘイビアツリーを作ります。その後、新規ブラックボードを作成し、それをルートノードからアタッチします。
まずはビヘイビアツリーの全体です。大体クマと一緒ですが、いくつか変えてあります。
攻撃側と索敵側で分けて説明します。
攻撃
索敵側で、プレイヤーを見つけられていたらこちらに回ってきます。
LookAtTargetタスクではセットされたターゲットアクターを向き続けます。
Shotタスクでは、BP_EnemyのAttackクラスを実行しています。Shotと銘打ってますが、BP_Enemyの子クラス全部で使えそうですね。今気づきました。
そして、実行後は5秒間のクールタイムです。初期値が5秒なだけなので、好きな値にしてもいいですが、0にしたら大変なことになるのでやめておいたほうが身のためです。
索敵
男らしくタスクは一つだけ。プレイヤーが索敵範囲内かどうかを調べるそれだけです。AIに実装したSearchPlayerでtrueなら一緒に帰ってきたPlayerのインスタンスをブラックボードのTargetPawnに与えます。
範囲外であるfalseなら空っぽにしてやり、攻撃側の実行がされないようにします。
完成
これでワールドに配置して、索敵範囲内にプレイヤーが入ると、こちらを向いて弾を撃ってくれば成功です。