はじめに
Nav Link Proxyを使った段差があるレベルで、ジャンプできるキャラとジャンプできないキャラが混在する場合、普通にナビメッシュを使うと、ジャンプできないキャラが移動できないにもかかわらず進もうとして段差のところで引っかかってしまうことが起こります。
この場合、キャラ毎に適用するナビメッシュを使い分ける必要があります。
Nav Link Proxyを使った段差があるレベルで、キャラにジャンプをさせる方法については、以前の記事Nav Link Componentを使用してゲーム内でナビメッシュをつなぐで説明しています。
環境
Windows10
UnrealEngine 4.27.2 (エディタの言語設定は英語です)
作り方
・プロジェクトの設定でSupportedAgentsの設定を追加します。
ここでは、ジャンプできるキャラ用の設定名をCanJumpに、ジャンプできないキャラ用の設定名をNotCanJumpに設定しています。
・NavArea_Defaultを親クラスとしてBPを作成します。
ここでは、ジャンプできるキャラ用にBP_NavArea_CanJumpを、ジャンプできないキャラ用にBP_NavArea_NotCanJumpを作成しています。
BP_NavArea_CanJumpはClass DefaultsのSupportedAgentsの設定を以下のようにします。
BP_NavArea_NotCanJumpはClass DefaultsのSupportedAgentsの設定を以下のようにします。
・RecastFilter_UserDefaultAreaを親クラスとしてBPを作成します。
ここでは、ジャンプできないキャラ用にRecastFilter_NotCanJumpを作成しています。
Area Classの設定をBP_NavArea_NotCanJumpにします。
・ジャンプできないキャラの設定を変更します。
キャラについているCharacter MovementコンポーネントのNav MovementのMovement Capabilitiesの設定で、Can Jumpのチェックを外します。
・レベルに設置するNav Link Proxyをの設定を変更します。
SupportedAgentsの設定をCanJumpに、Area Classの設定をBP_NavArea_CanJumpにします。
・移動先を決定する処理をキャラにあった設定に変更します。
例えば、ビヘイビアーツリーでEQSを使用している場合は、ジャンプできないキャラが到達可能かどうかを判定するために、Filter ClassをRecastFilter_NotCanJumpにします。
例えば、GetRandomReachablePointinRadiusノードを使用している場合は、ジャンプできないキャラが到達可能かどうかを判定するために、Filter ClassをRecastFilter_NotCanJumpにします。
参考資料
・【UE4】経路探索のコスト計算をカスタマイズする
Project Settingsにsupported agentsの項目があることをこちらで知りました。
・カスタム ナビゲーション システムとクエリ フィルタ
カスタム エリアとクエリ フィルタを使用する方法についての公式ドキュメントです。