Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@Dv7Pavilion

【UE4】ナビゲーションシステムのSupportedAgentsについて

More than 5 years have passed since last update.

はじめに

最近GTA4を遊んでいて「歩行者は歩道を歩き、車は車道を走る」ようにNavMeshを設定出来ないだろうかと思い、色々調べた結果プロジェクト設定にある「Supported Agents」が「AIごとに使用するNavMeshを設定する」役割を担っているようですので、そのSupportedAgentsについて解説しようと思います。

Supported Agents

Supported Agentsは上でも書きましたが「どのNavMeshがどのようなエージェント(AI)に対して歩行可能なエリアとして情報を提供するか」を定義出来る設定項目です。

この設定項目ですが
ウィンドウ>プロジェクト設定>エンジン>ナビゲーションシステム>Agents
にあります。
1_設定項目場所.PNG

Supported Agentsの定義

では、実際にSupportedAgentsを設定していきます。使用するテンプレートプロジェクトは「Top Down テンプレート」です。
+ボタンを押してエレメントを2個追加します。
設定項目がたくさん出ますが変更箇所は「Name」「Color」「Nav Agent Radius」「Nav Agent Height」「Can Jump」「Can Walk」「Can Swim」の7つです。
以下のように項目を変更します。
2_エレメント追加.PNG

図のTypeAで設定しているNav Agent RadiusとNav Agent Heightですが、この値はブループリント「TopDownCharacter」にある「CapsuleComponent」の「Capsule Half Heightを2倍した数」と「カプセル半径」です。これを基準のサイズとします。

3_カプセルコリジョン.PNG 4_コリジョンサイズ.PNG

TypeBはTypeAのNav Agent Radiusを半分にした値です。Nav Agent HeightはTypeAと同じです。
これらの設定によりNavMeshがサポートするエージェントは2種類になりました。

レベル上にNavMeshを敷く

次にレベル上にNavMeshを敷き、それぞれのエージェントを割り当てます。
TopDownExampleMapに既に配置されているNav Mesh Bounds Volumeと新しく追加したボリュームを配置します。
それぞれのボリュームのサイズは適当でOKです。以下の画像ではわかりやすくするため、わざと2つのボリュームをちょっとだけ重ねています。

5_レベル上にNavMesh.PNG

では配置したNavMeshBoundsVolumeに対してエージェントの設定をします。
どちらかのボリュームを選択して、詳細パネルの項目「Navigation」にあるチェックボックスをTypeAかTypeBのどちらかにチェックを入れるだけです。設定出来たら、もう片方のボリュームにも同様の設定をします。エージェントのタイプは逆にしてください。
6_NavMeshBoundsVolumeにエージェントを設定.PNG
この設定により、どのエージェントに対しNavMesh情報を提供するかを決定出来ます。

設定が終わり、実行してみるとTypeAに設定したNavMeshの範囲では移動が可能ですが、TypeBに設定したNavMeshの範囲では移動が出来ないようになっているはずです。

TopDownCharacterのMovement Capabilityを変更する

今度はTopDownCharacterのMovement Capability設定を変更してTypeAは移動不可にしてTypeBを移動できるようにします。
ブループリント「TopDownCharacter」を開き、コンポーネント「CharacterMovement」を選択します。
詳細パネル内にある「Movement Capability」を探して、NavAgentRadiusをTypeBで設定した値に変更します。
7_TopDownCharacterの設定を変更.PNG

Movement Componentの設定を変更する

次にMovement Capabilityに設定した値を使用するようにMovement Componentの「Update Nav Agent With Owners Collision」のチェックを外します。
8_コリジョン設定を使わない.PNG
この項目にチェックが入っていた場合、Movement CapabilityのNav Agent RadiusとNav Agent HeightにはCapsuleComponentのHalf Heightと半径の値が自動で入ってしまいます。

これらの設定によりTypeBに設定したNavMeshでの移動が可能となるはずです。

AIが参照するNavMeshを決める基準

キャラクターのMovement Capabilityの値を変更することにより、それぞれのエージェントタイプが設定されたNavMeshでの移動が可能となりましたが、この選択基準は「各設定項目に合致するエージェントタイプが設定されているかどうか」と思われます
Answer Hubより
今回の記事の場合だとナビゲーションシステム設定で設定した「Nav Agent Radius」と「Can Jump」「Can Walk」「Can Swim」とTopDownCharacterのMovement Capabilityの「Nav Agent Radius」と「Can Jump」「Can Walk」「Can Swim」が基準点となります。
TopDownCharacterのRadiusをSupported Agentsで設定した値よりも大きく離した値にすると両方とも参照できなくなります。

まとめ

Supported Agentsが未設定の場合、全てのAIはレベルに存在するNavMesh上の移動が可能となりますが、適切な設定をすることにより移動範囲や移動経路をある程度制御出来ます。これによりGTAのような「歩行者は歩道を歩く。車は車道を走る」であったり「狭い道は小型の敵だけ通れる。広い道は小型も大型も通れる」というような表現も可能となります。

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Dv7Pavilion
※はてなブログに引っ越しました。今後Qiitaの方では記事を書く予定はありません。 https://paviliondv7.hatenablog.com UE4についての記事が主になります。 何かご不明な点があれば Twitter : https://twitter.com/Dv7Pavilion?lang=ja や記事のコメントにでも書いていただければ幸いです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?