シンプルなタワーディフェンスゲームを作る part1
部品の用意
AI備え、自分で判断・行動を行うキャラクタを作成するために必要な部品(以下の4つ)を用意します。
- ブラックボード
- ビヘイビアツリー
- ブループリント(キャラクタを継承)
- ブループリント(AIコントローラを継承)
ブラックボード、ビヘイビアツリーは、コンテンツドロワー上で右クリック→AIの中に入っています(下図)。
ブループリント( キャラクタ)はコンテンツドロワーで「右クリック」→「ブループリントクラス」→上から3つ目の「Character」を選択(下図)
ブループリント(AIコントローラ)はコンテンツドロワーで「右クリック」→「ブループリントクラス」→「すべてのクラス」でAIControllerと検索することで選択できます(下図)。
今回は「simple_tower_defence」の下に「Enemy」フォルダを作成し、下図のような形で各部品を作成しました。
これらの部品はざっくり下図のような関係を持たせて使用していきます。
各部品の紐づけ
ビヘイビアツリーとブラックボードの紐づけ
まず、ビヘイビアツリーを開きます。「詳細パネル」→「BehaviorTree」を開くと「Blackboard Asset」という項目があるので、ここに先ほど作成した「BB_Enemy」を割り当てます。今回作ったブラックボードが1つ目の場合、既に割り当てられているかもしれません。
BP(キャラクタ)とBP(AIコントローラ)の紐づけ
キャラクタを継承して作成したブループリント「BP_Enemy」を開きます。右の詳細パネルに「AI Controller Class」という項目があるので、ここに先ほど作成した「BP_AI_Enemy」を割り当てます。
BP(AIコントローラ)とビヘイビアツリーの紐づけ
AIコントローラを継承して作成したブループリント「BP_AI_Enemy」を開きます。イベントグラフを開き、「Event BeginPlay」から「Run Behavior Tree」を繋ぎ、BTAssetに「BT_Enemy」を割り当てます。これでゲームを実行時に「BP_AI_Enemy」のビヘイビアツリーとして「BT_Enemy」が実行されます。
外観を作る
敵ユニットに着せる外観を作成します。今回はシンプルに三角コーンで作ります。
ビューポートに戻り、左上のモードを「選択モード」→「モデリングモード」に変更します。左側にツールバーが表示されるので「作成」の「Cone」を選択します。ビューポート上で左クリックするとコーン形状が現れるので好きな大きさに調整します。今回は「Radius」を30、「Height」を100に設定しました。
作成した部品(スタティックメッシュ)は、現在いるレベルのあるフォルダに「_GENERATED」という自動的に作成されるフォルダに格納されています。
これを「Enemy」フォルダに移動し名前を「SM_Enemy」とします。
「BP_Enemy」を開き、先ほど作成した「SM_Enemy」をドラッグアンドドロップすることで配置します。
プレイヤを追いかけるAIを作る
ビヘイビアツリー「BT_Enemy」を開きます。
ビヘイビアツリーの左上の「新規タスク」を押下します。「Enemy」フォルダの中に「Task」フォルダを作成し「BTTask_chase_target」という名前で保存します。
「BTTask_chase_target」を開き、「関数」「オーバーライド」→「Receive Execute AI」を選択し、「Event Receive Execute AI」を作成します。
「Event Receive Execute AI」に「AI Move To」を繋ぎ、「Target Actor」に「Get Player Controller」等を下図のような形で繋ぎます。
ビヘイビアツリー「BT_Enemy」の「Root」の下部分をドラッグアンドドロップで線を引き出し「Sequence」を追加し、さらに「Sequence」の下部分をドラッグアンドドロップで線を引き出し、作成した「BTTask_chase_target」を検索し追加します。
levelのビューポートに戻り、作成した「BP_Enemy」を配置します。
AIが移動するためには移動可能な領域を設定する必要があります。ビューポートの左上の「+」ボタンから、「ボリューム」→「ナビメッシュバウンズボリューム」を選択します。
「ナビメッシュバウンズボリューム」を配置すると透明なボックスが現れます。このボックスがAIの移動できる範囲を定義します。ビューポートの左上「表示」→ナビゲーションを選択するか、PキーでAIの移動範囲を可視化できます(下図緑色領域)。作成した「ナビメッシュバウンズボリューム」を適当な大きさに広げます。
これで冒頭のようなプレイヤを追いかけるAIキャラクタを作ることが出来ました。
コメント