検証バージョン: UE4.26.0
はじめに
[目標]
・エージェント毎に生成されるナビメッシュの設定を.iniファイルから設定します
例えば、以下図のようにCellSize
の値を.iniファイルから設定する方法になります。
[応用]
・.iniファイルから一括してナビメッシュの生成パラメータを設定することができます
・応用として、エージェント毎の設定やナビデータ毎の設定ができるようになります
前提
以下の内容は前提として知っておきたい内容です。
・レベル上のナビメッシュはRecastNavmesh(NavData)の設定に従って生成されます
ナビメッシュの機能や精度はこの設定を調整します。
・ナビメッシュはエージェント毎に生成されます
エージェントに対するナビメッシュの設定はProject Settingsから行います。
・デフォルトのNavData(RecastNavmesh)の設定はBaseEngine.ini
に設定されています
プロジェクトで上書きしたい場合はDefaultEngine.ini
で再定義するだけです。
例えば以下のデフォルト値はProject Settingsでも定義されています。
[/Script/NavigationSystem.RecastNavMesh]
CellSize=19.f
設定
以下の手順で独自のクラスを追加して.iniファイルから編集できるようになります。
[手順]
① カスタムナビデータクラスを作成
② プロジェクト設定にナビデータクラスを設定
③ .iniファイルにデフォルト定義を追加
① カスタムナビデータクラスを作成
ARecastNavMesh
を継承した、MyNavData
というカスタムクラスを作成します。
#pragma once
#include "CoreMinimal.h"
#include "NavMesh/RecastNavMesh.h"
#include "MyNavData.generated.h"
UCLASS()
class TESTPROJECT_API AMyNavData : public ARecastNavMesh
{
GENERATED_BODY()
};
② プロジェクト設定にナビデータクラスを設定
先ほど作成したナビデータクラス MyNavData
をデフォルトで使用するように割り当てます。
[Project Settings]->[Navigation System]->[Agents]->[Supported Agents]の
NavDataClass
にMyNavData
を設定するだけです。
設定は DefaultEngine.ini
に保存されて以下のように登録されます。
[/Script/NavigationSystem.NavigationSystemV1]
+SupportedAgents=(Name="Normal",Color=(B=0,G=255,R=140,A=164),DefaultQueryExtent=(X=50.000000,Y=50.000000,Z=250.000000),NavDataClass=/Script/NavigationSystem.RecastNavMesh,AgentRadius=35.000000,AgentHeight=144.000000,AgentStepHeight=-1.000000,NavWalkingSearchHeightScale=0.500000,PreferredNavData=None,bCanCrouch=False,bCanJump=False,bCanWalk=False,bCanSwim=False,bCanFly=False)
+SupportedAgents=(Name="Special",Color=(B=23,G=0,R=255,A=164),DefaultQueryExtent=(X=50.000000,Y=50.000000,Z=250.000000),NavDataClass=/Script/TestProject.MyNavData,AgentRadius=40.000000,AgentHeight=200.000000,AgentStepHeight=-1.000000,NavWalkingSearchHeightScale=0.500000,PreferredNavData=/Script/TP426.MyNavData,bCanCrouch=False,bCanJump=False,bCanWalk=False,bCanSwim=False,bCanFly=False)
以下の部分が自分で追加したナビデータクラスです。
クラス定義には/Script/[プロジェクト名].[プレフィックスなしのクラス名]
となっています。
NavDataClass=/Script/TestProject.MyNavData
後はRecastNavmeshと同様に、以下のように上書きする定義をDefaultEngine.ini
に追加します。
こうすることでカスタムクラスのデフォルト値を反映することができます。
[/Script/TestProject.MyNavData]
CellSize=100.f
まとめ
ナビメッシュを生成するために必要なパラメータ(NavDataのパラメータ)は、レベル上に配置されたRecastNavmeshの設定を直接編集することが可能なため、レベル毎に異なる設定値を保存することもできます。
これは一見便利ですが、同じエージェントであってもレベルによって挙動が変わるという可能性もあり得ることになるため、統一性の観点でも極力エージェントの設定はProject Settingsで設定が統一されることが望ましいです。