3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UE4でAIを組み込んで各機能の取り扱いを考察する(その2:ビヘイビアって必要?)

Last updated at Posted at 2017-06-17

#UE4でAIを組み込んで各機能の取り扱いを考察する(その2:ビヘイビアって必要?)

##クイックスタートで作った動作
プレイヤーの近くに移動する
SnapCrab_NoName_2017-5-19_8-45-56_No-00.jpg

##同じ動作をするブループリントを極力短くキャラクター側に書いてみる
SnapCrab_NoName_2017-5-21_0-12-56_No-00.jpg

細かい判断による動きは違うものの、上記のブループリントを動作させると、
SnapCrab_NoName_2017-5-21_0-12-38_No-00.jpg

SnapCrab_NoName_2017-5-21_0-11-54_No-00.jpg

ほぼ1命令で黄色のキャラクターが見た目同じような動作をしました。

##結論
ビヘイビア必要ない。

、、、いやいや、本当にそうでしょうか?

##機能別にビヘイビア要素を確認してみる
本家のDocumentにもありますが、再度、確認しましょう。

###Composites
Sequence,Selector
SnapCrab_NoName_2017-6-17_13-29-8_No-00.jpg SnapCrab_NoName_2017-6-17_13-46-5_No-00.jpg

ツリーのノードになります。
Selectorは右からチェックしていってTrueが返ってくるTaskがあるまで処理されます。
Sequencerは右から順番にTrueが返ると次のTaskに移って処理されます。

##Decorator
SnapCrab_NoName_2017-6-17_13-44-53_No-00.jpg

条件文を書きます。
この条件はひとつ前のノードのServiceで定義された処理のみが有効です。

##Service
SnapCrab_NoName_2017-6-17_13-45-33_No-00.jpg

フラグの更新を行います。
たとえ、MoveToでTaskが止まっていてもServeceに設定された感覚で呼ばれますので注意しましょう。

##Task
SnapCrab_NoName_2017-6-17_13-47-45_No-00.jpg
キャラクターの行動を記載しましょう。
Sequenceでターゲットを設定後、MoveToで動かすのがよいのではないかと思います。

もろもろ検証した結果、上記の役割で動作させるのがよいのではないかと考えますが、如何でしょうか?

##ビヘイビアツリーのメリット
さて、メリットは何でしょうか?
一つ作ってみて思ったのは、Decorator,Service,Taskを再利用してルールや個性を作るためのモデルとして、有用であることです。
同じ条件のBlackboadの設定を変更することで、プレイヤーキャラクターをターゲットにしたり、単なるアクターオブジェクトをターゲットにしたりすることができるのは、BluePrintの作業時間を考えてもかなり効率的に設定できます。
たくさんの条件文(Decorator)やフラグチェック(Service)によって、新しい制御も追加しやすく、優先度も位置を変えるだけでよいので、かなり設定が楽になると思います。
また、公式ドキュメントにもある通り、デバッグも用意であることもメリットの一つでしょう。

##ビヘイビアツリーのデメリット
Blackboadのフラグが有効になっている範囲が明確でない点はかなり最初戸惑います。
引っかかった点を挙げていきます。

###注意点1.Blackboadの値の有効範囲
一番上のノードのServiceでフラグや値を更新しても、一つノードを挟むだけで無効化されてしまします。
そのため、常に値の有効範囲を注視する必要があり、気を付ける必要があります。

###注意点2.Moveto関数の処理
MoveTo関数も下記のようにSucessからノードをExcuteに引っ張らないと目的地まで移動し続けるような形で意図した動作をしてくれないので注意しましょう。
SnapCrab_NoName_2017-6-17_13-56-30_No-00.jpg

###注意点3.MoveToへ引き渡すターゲット
MoveToで動作している間も、Servieは回ってくるため、下記のように移動ターゲットはSequenceを使って設定するのがよいのではないだろうかと考えます。
Serviceで作成するとターゲットがころころ変わり、今どこに向かっているのかもわからなくなります。
SnapCrab_NoName_2017-6-17_13-59-49_No-00.jpg

##ゲームに必要なAIの要件は?
Q.ゲームに必要なAIの要件は?
A.様々です。

いろんなジャンルで必要とされるAIの内容は違います。
クリボーやノコノコ、最近はモンハンのボスでも、日本でよく見られるアクションゲームではある一定のルールで行動を繰り返すパターンが多数みられるでしょう。

対して、FPSやウォーゲームを模した海外のアクションではバトルフロントしかり、ホライズンしかり、しっかりと統率された環境上で、自分と同じあるいは、制限化にあるプレイヤーのような動作を求められるでしょう。

AIとは
人工知能(じんこうちのう、英: artificial intelligence、AI)とは、人工的にコンピュータ上などで人間と同様の知能を実現させようという試み、或いはそのための一連の基礎技術を指す。(wiki調べ)
https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD

ビヘイビアツリーとは
Behavior Trees (ビヘイビアツリー) は、闇に潜む憎きゴキブリから、シューティング ゲームの Bot に至るまで、撃つタイミングやヘルス値と弾薬を求めるタイミングが分かる AI をアンリアル エンジン 4 で作るパワフルなツールです。
https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/index.html

改めて、用語もおさらいしてみましたが、ビヘイビアツリーの説明を見ると、FPSを作るためのエンジンだなぁとつくづく思います。

それでも、DecoratorとTaskが再利用できるだけでもかなりの効率化となりますので、
2つ以上の判断を用いるAIを作成する場合は、ビヘイビアツリーを使うのがよいでしょう。

次回はある有名なゲームを参考に作成したAIの作成例です。

こんなの
SnapCrab_NoName_2017-6-17_14-55-17_No-00.jpg

SnapCrab_NoName_2017-6-17_15-1-40_No-00.jpg

(※補足)
上記内容の作成途中のまま更新が止まっているパッケージはこちら
(もし気まぐれに続きを更新する場合はそちらの記事にリンクを移動させます)
https://drive.google.com/file/d/1A512B14WOFH1uP4PGlJac1qR-TVZGuUi/view?usp=sharing

##参考Webページ
◇AIについて
https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD

◇ビヘイビア
https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/index.html

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?