在C++中使用导航网格
引入导航NavigationSystem
要想使用这个导航网格,除了引用对应的命空间还要对应的build.cs文件中引入导航模块,
不然编译会报错,如下:
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore" ,
"NavigationSystem", // 引入导航模块,不然编译报错
});
获取当前的导航系统:
UNavigationSystemV1* const tNavgation = UNavigationSystemV1::GetCurrent(GetWorld());
在学习UE4 AI的时候遇到了没有导航数据NavData的问题记录下
问题引入:
- 在UE4中添加了NavMeshBoundsVolume之后,引擎会自动为我们构建Path,同时生成一个RecastNavMesh-Default
- 我们选中RecastNavMesh-Default,在Details面板->Generation中,我们可以调整Agent Radius,和Agent Height,这个是有如果编辑开启了自动更新Path,同时按了P键显示Path,我们就会看到Path随着我们的修改在改变。
- 我们在上面的步骤做了修改之后,然后运行你会发现,咦,AI傻了,咋不动了,我来断点试试,启用了AIDebugger,咋回事,怎么NavData没了,但是场景中明明有的呀,那我控制台打个命令show Navigation,呕吼Path咋没了喃。
问题分析:
- 既然Path没了,而且只是改了RecastNavMesh-Default的东西,那我再改回,发现不行。
- 那是不是因为自动更新有问题,我主动构建一下Path,也不行。
- 那我直接删了它吧,删了之后不会再自动生成了,那我在构建一下Path,好了。
- 综上就是这RecastNavMesh-Default里面的东西可以改,也会在编辑器里实时显示,但是在进行游戏的时候就不行了。推测Path的生成是根据Agent来计算的,RecastNavMesh-Default是根据之前设定好Agent数据生成的,我直接在RecastNavMesh-Default里修改Agent数据,然后因为Agent不一致导致了这个RecastNavMesh-Default失效了。
- 那我要生成不同的Path该怎么解决喃。
问题解决:
- 首先在ProjectSettings–>Navigation System–>Agents–>Supported Agents添加需要的Agent
- 在WorldSettings–>World–>NavigationSystemConfig–>DefaultAgentName中填入上一步设置的AgentName
- 在编辑中删除RecastNavMesh-Default,重新构建Path就可以了