UE4でAIを組み込んで各機能の取り扱いを考察する（その１：ビヘイビアの組み込み）

#  UE4でAIを組み込んで各機能の取り扱いを考察する（所感）（その１：ビヘイビアの組み込み）

##目的
UE4ビヘイビア組み込みのクイックスタートからAIの機能を理解しよう

##環境
UnrealEngine 4.15.2

##クイックスタート組み込み
１．下記のドキュメントをもとにAIを実装しました。
ビヘイビアツリーのクイックスタートガイド
https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/QuickStart/index.html

UE4のドキュメントはどれも詳しく書かれていますので、重宝します。
上記のガイドもブループリントも含めた手順が追加する変数と共に詳細に記載されているので、すぐに動かせるはずです。

２．組み込んでプレイした結果
![SnapCrab_NoName_2017-5-20_6-55-26_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/71650cfe-c55f-8e74-2b9c-ab19b1170c30.jpeg)

動きません。。
何がよくなかったのでしょうか？

##クイックスタートのデバッグ
今回AIを組み込んだのはカメラを独立させてHPバーを組み込んだThirdPersonのサンプルでした。

敵キャラとして用意したキャラクターにAIを入れて自分に向かって移動してくるようにせってしました。

クイックスタートガイドでは基本アセット作成の２でキャラクターを1から作っていたため、手順通り、キャラクターを作って試してみましょう。

↓これです。ここは端折ってすでに作ったキャラクターを使いました。
![SnapCrab_NoName_2017-5-20_7-47-40_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/9255b2fa-b94b-0c0c-ecb6-86abf240a245.jpeg)

もろもろ設定して、わかりやすく黄色くしました。
![SnapCrab_NoName_2017-5-20_6-54-35_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/7fd1a5ff-35ae-e512-5920-c1eea8ab740a.jpeg)

配置してプレイしてみましょう。
こいつだけ動作してくれるでしょうか？
![SnapCrab_ThirdP - アンリアルエディタ_2017-5-20_6-54-58_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/181347/d4fb470e-8cdd-d3cf-b9bc-c450d1008298.png)

？
なぜか、このキャラクターに近づいてきました。

一度、新しく置いたキャラクターは消して、動作中のビヘイビアを見てみましょう。
![SnapCrab_NoName_2017-5-20_6-55-26_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/96812540-aaa2-c35e-b767-c9120ae9affc.jpeg)
↓この状態のビヘイビアツリーは？
![SnapCrab_NoName_2017-5-19_8-43-7_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/faf5a919-556a-a302-faa9-4c07d2793e0b.jpeg)

ターゲットの設定が行われていないようです。
AgroCheckのブループリントをブレイクしてみましょう。
![SnapCrab_NoName_2017-5-19_8-42-20_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/084ecae9-29e1-7d68-c71e-2f9218121b94.jpeg)

確かにここには来ていませんが、LineTrackByChannelまでは来ていました。

![SnapCrab_NoName_2017-5-19_8-42-47_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/a4baf27d-408f-a868-b5a6-8c984ebab80c.jpeg)

つまり、Hitしていない。
DrawDebugTipeを変更して機能を見てみても黄色いキャラを置いた時と自分とでは赤いラインが、Hitしていない様子がわかります。

LineTraceByChannel関数はどういった関数でしょうか？
UE4の公式ドキュメントによると、Start位置からEnd位置までをラインでつなぎ、Ignoreリスト以外のActorをTraceChannelに指定されたブロックチェックで引っ掛けるものです。

*LineTraceByChannel | Unreal Engine Blueprint API Reference*
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Collision/LineTraceByChannel/index.html
*ブループリントにおけるレイキャスト（トレーシング）の使い方 | Unreal Engine*
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

アルゴリズムとしては、レイトレースして、カメラがぶつかるかどうかをチェックする機能でAIキャラクターが相手を認識しているかをチェックしているようです。

！おっと
![SnapCrab_NoName_2017-5-20_8-33-51_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/82152ca3-ec88-15f7-568e-fdc725b30552.jpeg)

キャラクターがカメラをブロックしてなかったせいでした。
たしかに、カメラを独立化させたときにオーバーラップに変更しています。
これをブロックに直すと、
![SnapCrab_NoName_2017-5-20_7-1-6_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/9cfbad36-bb66-c5f7-52a3-bba108c0f0d8.jpeg)

寄ってきました。。。（ちょっと怖い画面ですね）

カメラをコンポーネントとして入れるか、あるいは別の方法でチェックすればいいはずです。

別方法のチェックを試します。
![SnapCrab_NoName_2017-5-20_8-38-25_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/acf1632e-ec49-2f88-7c65-5bac1819001d.jpeg)

LineTraceForObjectはレイトレースする際にIgnoreActorを除いた該当のオブジェクトにぶつかったときにリザルトが返ってくる関数です。

*LineTraceForObjects | Unreal Engine Blueprint API Reference*
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Collision/LineTraceForObjects/index.html

結果
![SnapCrab_NoName_2017-5-19_8-45-56_No-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/181347/048fcb7f-df7c-a4e2-a53a-ad31b647ce4c.jpeg)


##次回
次回は組み込んだビヘイビアを元にデコレーターの役割と、ビヘイビアの使いどころを記載したいと思います。

##パッケージ
https://drive.google.com/file/d/1Cq69IhQlHp1lhSpcz8wPG23DCakxoRMe/view?usp=sharing

##参考Webページ
◇AI組み込み
https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/QuickStart/index.html
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

◇ブループリントAPI関数
https://docs.unrealengine.com/latest/INT/BlueprintAPI/index.html