【UE100日チャレンジ】ビヘイビアツリーで敵AIを作成!トランスフォーム操作によるギミック制作も
初学者がUnreal Engineによるゲーム制作に100日取り組んで、どこまでプロの開発者に近づけるのかという本企画。今回は第8弾となります。
前回に引き続き、『Unreal Engine 5で極めるゲーム開発』で学習を進めています。今回はAIやギミックなど、動きのある要素を作りました。
このビヘイビアツリーが、どのような仕組みなのかを簡単に説明します。
まず、「Selector」と「Sequence」の違いを説明します。この二つのノードは、どちらも「左から右に処理を順番に実行する」という機能を有しています。
しかし、処理に成功/失敗した場合のふるまいは対照的です。「Selector」は一つでも処理に「成功」すると、その時点で残りのタスクの実行を停止します。一方の「Sequence」は、一つでも「失敗」すると、残りのすべてのタスクを停止します。
この二つのコンポジットノードをうまく使いながら、ビヘイビアツリーを組んでいます。まず、「ROOT」直下の「Selector」で、基本的な動きを選択させます。
一番右のツリーは、「自機を認識して、追尾する」という処理。真ん中のツリーは、「自機を見失った際にスプリントをやめ、立ち止まる」という処理。一番左のツリーは、「特定のポイントを巡回する」という処理になっています。
「Selector」は処理に失敗したノードは無視するので、自機がセンサーに引っかからない限り、一番右の、巡回処理が実行されます。このような配置にすることで、「普段は巡回し、自機を見つけたら追いかける」という動きが実現できます。
左のツリーにある青のノードは「条件付け」を表し、一定の条件を満たしたときのみ後の処理を実行します。これで、自機を補足したときのみ、一定時間だけ追いかけるという動きを可能にしています。
右のツリーにある緑色のノードは「サービス」と呼ばれ、周囲の情報をキャッチするセンサーの役割を果たします。これで、次の巡回ポイントをサーチしています。
このようなノードをつないでいくことで、普段は巡回しつつ、自機を見つけると追いかけてくるという動きを実現しています。
トランスフォームで動きをつける!
次に、トランスフォームについて解説します。
トランスフォームとは
トランスフォームとは、オブジェクトの①位置、②回転、③拡大、縮小、の三種類の操作を合成した変換です。
位置は、オブジェクトが3D空間のどこに配置されているかを示します。X軸、Y軸、Z軸の三つの値で示されます。
回転は、オブジェクトがどの向きを向いているかを示します。こちらも3つの軸を持ちます。
拡大、縮小は文字通り、物体の大きさを表します。
このトランスフォームをオブジェクトに適用することで、ゲーム内のオブジェクトを好きなように移動させたり、回転させたり、拡大、縮小させることができます。
さらに、トランスフォーム同士を掛け合わせることで、複雑な動きも作ることができます。ブループリント上で取り扱うこともできるため、アルゴリズムを使って物体の動きを制御することができます。
これを応用して、機関銃から発射される弾丸の弾道をばらつかせるプログラムを組みました。ブループリントで、銃口のトランスフォームと、ランダムな回転を生むトランスフォームを合成することで、ばらつきのある弾道を実現しています。
トランスフォームを応用したギミックづくり
トランスフォームを活用することで、動きのあるギミックを作ることもできます。
以下のポストの動画は、トランスフォームを利用したパズルの一例です。
#UnrealEngine100日チャレンジ 48日目!
— GAMEMO|Web3とメタバースのインタビューメディア (@Gamemo2con) September 11, 2024
本日は物体の動かし方をより深く学び、連動して動く仕組みや、ランダムな動きを実装できるようになりました!ここは複雑で奥が深い分野です。頑張って勉強します……。
添付の動画は、今回学んだことを活かしたパズルです。 pic.twitter.com/r75wX268ME
このブロックはジャンプ動作に反応するようになっていて、ジャンプすることで上下に動いたり、左右軸に回転します。なお、トランスフォームをインスタンス編集可能な変数として設定することで、この挙動は簡単に変えることができます。
変数名は、「Dest Transform」としています。
例えば、この「Dest Transform」の設定を変え、「拡大・縮小」の値を変えると……
動画のように、「ジャンプに反応して移動しつつ、大きさも変わる」というギミックが作れます。
このように、トランスフォームを利用すれば、オブジェクトの移動や挙動、大きさを制御でき、物体を自由自在に動かせます。
大変便利なトランスフォームですが、その計算は複雑で、掛け算の順番によって結果が大きく変わってしまいます。筆者も、まだ自由自在に計算式が組めるわけではなく、思った通りの挙動を作るまでに何回も失敗しました。
以下のリンクで、トランスフォームの計算方法について詳しく解説されています。
次の目標:書籍による学習の終了
今回、ビヘイビアツリーやトランスフォームについて学習して、より動的な仕組みをゲームに組み込めるようになりました。
現在書籍を参照して作っているゲームは、仕組みこそ作ってはいるものの、見た目が単調ですし、キャラクターにもアニメーションがなく、無機質な仕上がりです。
次回は、アニメーションや細かい物理判定の設定、ゲームの「見た目」の整え方など、ゲーム製作でも「詰め」の部分を学習して、完成度を高めていく方法を学びます。長かった書籍での学習も大詰めに入ってきました。ラストスパート、張り切っていきます。
Unreal Engine 100日チャレンジは今後も継続してゆきます。
引き続きよろしくお願いします。
- 1
- 2
今回組んだビヘイビアツリー