SupportedAgentsで大きさの違うキャラそれぞれに合わせたナビメッシュで動かす話


[Unreal Engine (UE) Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ue)、21日目でーす。
どもども（ΦωΦ）
今年６月からUE4のエンジニアとしてガッツリゲーム開発してるIZUNAです

今回は、SupportedAgentsのお話をしますー。

SupportedAgentsに関しては前に記事を書いてる方がいます。
お世話になってますー（ΦωΦ）
https://qiita.com/Dv7Pavilion/items/625eeeb1885fe8d76f20

今でもこの内容通りにできますが、
4.27の環境やちょっと前のバージョンだとうまく行かなかったことがあったりのお話をしたいと思います。
あと、細かいところはちょっと飛ばしてサクッと動かすだけの内容ですー（ΦωΦ）

■前準備
プロジェクト設定から、ナビゲーションシステムの項目を選んでエージェントを開いて何もリストに無かったら２つ追加してください。
わかりやすくDefaultとBigというのを作って Nav Agent RadiusをDefaultは42、Bigは100にしておきます。
細かいことは置いといてで説明すると
RadiusとHeightの値より小さいやつで一番近い値の方を使うようになる感じです（ΦωΦ）
もしそれ以上にでっかいの作った場合は、プロジェクト設定-ナビゲーションシステムにある「デフォルトのエージェント名」に設定されてるやつ使います。


![nav0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/6861d938-2457-e208-8f25-0de5b6aaa6ed.png)

これをビルドしてNavメッシュを設定するとこんな感じになります
緑のメッシュがDefault、青がBigです

CapsuleComponentのRadiusはエージェントのBig![nav1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/8c671d28-e41e-f2eb-d6d5-5426919c4a6f.png)

狭いところはBigが通れない感じですね。



■AI側の準備
AIの中身はプレイヤーに一定距離でついてくるものを作りました。
それぞれ色違いでわかりやすくしてます
Defaultのエージェントを使う方は緑にしておきます。

CapsuleComponentのRadiusはエージェントのDefaultで設定したRadiusと同じで


![nav3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/3d6f603c-b5ef-b41b-df88-564620be1962.png)
https://qiita.com/Dv7Pavilion/items/625eeeb1885fe8d76f20


Bigの方は赤にしました。

CapsuleComponentのRadiusはエージェントのBigで設定したRadiusと同じにしておきましょう。
デカすぎんだろ。ですね（ΦωΦ）

![nav5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/da3fa567-3439-31e6-3754-07431b806ae2.png)



■動作確認

緑のDefaultは、狭ところでもついていけますね

![nav2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/2a86c198-cf72-678a-48d6-9e181dfa6647.png)

ところが、Bigは狭いところに通れないので
プレイヤーについてこようとすると回り込んで来ます。
当たり判定大きからなので当たり前かもしれませんけどね

![nav4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/27bef62e-4303-a820-a3d4-3a6c7ee80556.png)

それではこのコリジョンの大きさをDefaultよりちょっと大きいぐらいまで調整しましょう
これぐらいならブロックの間を通れそうですね。
![nav6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/b71a66fc-7b40-5f39-5cf9-491fc6cf1fd6.png)

でも、回り込んじゃいます。
エージェントは設定した大きさより小さいものに反映されるので
大きさが近くても、設定より大きな値の場合は大きな値で設定されているエージェントのナビメッシュを使います。

![nav7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/43f279ec-5c91-a23a-30bb-fed6b6674bb2.png)

動画だとこんな感じです・

<iframe width="560" height="315" src="https://www.youtube.com/embed/YUKT9SzsN2M" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>




他にもEQSを使ったりして　プレイヤーに迫ってくるAIでも使えるので便利です。


■その他
さてさて、使ってみると結構簡単なSupportedAgentsですが。
何故かうまく動かないことがあり、おかしいなっと言うのがあったらそれは
CrowdFollowingComponentのバグかもしれないですね。
https://forums.unrealengine.com/t/supported-agents-not-working-on-unreal-engine-4-15-0/92079

今では、直ってるはずだけど古いやつで動かしてた時に動作が怪しいときがありましたので
古いバージョンを使ってるかたで上記のやり方ができなかった人はこの辺を調べてみてください。


更に追加ですが、それぞれのSupportedAgentsで設定したナビメッシュにNavigation Modifierを設定する場合は
ナビゲーション クエリ フィルタ ってのがあります。
これについては年明けに記事を書く予定ですー（ΦωΦ）

https://docs.unrealengine.com/4.27/ja/InteractiveExperiences/ArtificialIntelligence/NavigationSystem/CustomNavigationAreasAndQueryFiltersLanding/CustomNavigationAreasAndQueryFilters/



それでは良いお年をー（ΦωΦ）