【UE100日チャレンジ】ビヘイビアツリーで敵AIを作成!トランスフォーム操作によるギミック制作も

【UE100日チャレンジ】ビヘイビアツリーで敵AIを作成!トランスフォーム操作によるギミック制作も

【UE100日チャレンジ】ビヘイビアツリーで敵AIを作成!トランスフォーム操作によるギミック制作も

初学者がUnreal Engineによるゲーム制作に100日取り組んで、どこまでプロの開発者に近づけるのかという本企画。今回は第8弾となります。

前回に引き続き、『Unreal Engine 5で極めるゲーム開発』で学習を進めています。今回はAIやギミックなど、動きのある要素を作りました。

コンテンツ [表示]

  1. 1Unreal Engine企画第8弾!
  2. 2今回学習したこと
  3. 2.1ビヘイビアツリーとは?
  4. 2.2トランスフォームとは?
  5. 3ビヘイビアツリーでAIを作る!
  6. 3.1ビヘイビアツリーの使い方
  7. 3.2敵の動きを作る!
  8. 3.3作成したビヘイビアツリーの仕組み
  9. 4トランスフォームで動きをつける!
  10. 4.1トランスフォームとは
  11. 4.2トランスフォームを応用したギミックづくり
  12. 5次の目標:書籍による学習の終了

 

このビヘイビアツリーが、どのような仕組みなのかを簡単に説明します。


 

AIのプログラム

今回組んだビヘイビアツリー


まず、「Selector」と「Sequence」の違いを説明します。この二つのノードは、どちらも「左から右に処理を順番に実行する」という機能を有しています。

 

 

しかし、処理に成功/失敗した場合のふるまいは対照的です。「Selector」は一つでも処理に「成功」すると、その時点で残りのタスクの実行を停止します。一方の「Sequence」は、一つでも「失敗」すると、残りのすべてのタスクを停止します。


 

 

この二つのコンポジットノードをうまく使いながら、ビヘイビアツリーを組んでいます。まず、「ROOT」直下の「Selector」で、基本的な動きを選択させます。

 


 

 

 

一番右のツリーは、「自機を認識して、追尾する」という処理。真ん中のツリーは、「自機を見失った際にスプリントをやめ、立ち止まる」という処理。一番左のツリーは、「特定のポイントを巡回する」という処理になっています。

 

「Selector」は処理に失敗したノードは無視するので、自機がセンサーに引っかからない限り、一番右の、巡回処理が実行されます。このような配置にすることで、「普段は巡回し、自機を見つけたら追いかける」という動きが実現できます。

 

左のツリーにある青のノードは「条件付け」を表し、一定の条件を満たしたときのみ後の処理を実行します。これで、自機を補足したときのみ、一定時間だけ追いかけるという動きを可能にしています。

 

右のツリーにある緑色のノードは「サービス」と呼ばれ、周囲の情報をキャッチするセンサーの役割を果たします。これで、次の巡回ポイントをサーチしています。

 

このようなノードをつないでいくことで、普段は巡回しつつ、自機を見つけると追いかけてくるという動きを実現しています。

 


 

トランスフォームで動きをつける!


次に、トランスフォームについて解説します。

トランスフォームとは

 

トランスフォームとは、オブジェクトの①位置、②回転、③拡大、縮小、の三種類の操作を合成した変換です。

位置は、オブジェクトが3D空間のどこに配置されているかを示します。X軸、Y軸、Z軸の三つの値で示されます。

回転は、オブジェクトがどの向きを向いているかを示します。こちらも3つの軸を持ちます。

拡大、縮小は文字通り、物体の大きさを表します。

このトランスフォームをオブジェクトに適用することで、ゲーム内のオブジェクトを好きなように移動させたり、回転させたり、拡大、縮小させることができます。

さらに、トランスフォーム同士を掛け合わせることで、複雑な動きも作ることができます。ブループリント上で取り扱うこともできるため、アルゴリズムを使って物体の動きを制御することができます。


 

トランスフォームのプログラム

オレンジ色のラインがトランスフォーム。

 

これを応用して、機関銃から発射される弾丸の弾道をばらつかせるプログラムを組みました。ブループリントで、銃口のトランスフォームと、ランダムな回転を生むトランスフォームを合成することで、ばらつきのある弾道を実現しています。


 

機関銃から弾が発射されている様子。

細かい球が機関銃の弾。

トランスフォームを応用したギミックづくり

 

トランスフォームを活用することで、動きのあるギミックを作ることもできます。

以下のポストの動画は、トランスフォームを利用したパズルの一例です。


 

 

このブロックはジャンプ動作に反応するようになっていて、ジャンプすることで上下に動いたり、左右軸に回転します。なお、トランスフォームをインスタンス編集可能な変数として設定することで、この挙動は簡単に変えることができます。

変数名は、「Dest Transform」としています。

 


 

アンリアルエンジンのエディタ

赤枠で囲われた部分を変えることで挙動を変更できる。

 

例えば、この「Dest Transform」の設定を変え、「拡大・縮小」の値を変えると……


 

ゲーム内ギミックの様子

 

動画のように、「ジャンプに反応して移動しつつ、大きさも変わる」というギミックが作れます。

 

このように、トランスフォームを利用すれば、オブジェクトの移動や挙動、大きさを制御でき、物体を自由自在に動かせます。

大変便利なトランスフォームですが、その計算は複雑で、掛け算の順番によって結果が大きく変わってしまいます。筆者も、まだ自由自在に計算式が組めるわけではなく、思った通りの挙動を作るまでに何回も失敗しました。

以下のリンクで、トランスフォームの計算方法について詳しく解説されています。


 

[UE4] Transformの変換の基礎の基礎 #UnrealEngine - Qiita
トランスフォーム計算のチュートリアル

次の目標:書籍による学習の終了

的に刺さった矢

 

今回、ビヘイビアツリーやトランスフォームについて学習して、より動的な仕組みをゲームに組み込めるようになりました。

 

現在書籍を参照して作っているゲームは、仕組みこそ作ってはいるものの、見た目が単調ですし、キャラクターにもアニメーションがなく、無機質な仕上がりです。

 

次回は、アニメーションや細かい物理判定の設定、ゲームの「見た目」の整え方など、ゲーム製作でも「詰め」の部分を学習して、完成度を高めていく方法を学びます。長かった書籍での学習も大詰めに入ってきました。ラストスパート、張り切っていきます。

 

Unreal Engine 100日チャレンジは今後も継続してゆきます。

引き続きよろしくお願いします。


 

neru
ライター

neru

大学生時代に英文学を専攻していたライターです。学生時代からゲームやVtuberといった領域に興味を持っており、情報収集をしてきました。現在は英語のスキルを活かしつつ、英語×エンタメ最新領域を掛け合わせたリサーチ活動や、記事執筆を行っています。好きなものはラーメン、サッカー観戦、音楽鑑賞。

おすすめの記事

Recommended Articles
  • ゲーム企画の伝え方 〜より良い企画を作成するために抑えるべきポイント〜

    2024.02.13

  • 【完全版】ChatGPTを使いこなすための汎用プロンプト16選

    2024.03.22

  • ChatGPTを使ったゲーム企画書の書き方|すぐに使えるプロンプトと実例

    2024.03.22