[程式] UE4 Navigation Mesh 心得

楼主: yekdniw (yekdniw)   2020-11-19 20:16:40
网页版
https://yekdniwue.blogspot.com/2020/11/NavMeshExperience.html
UE4的Navigation Mesh 如果照着网络上的教学做,大概都可以建的出来。
A.I.角色也都能够在上面正常行走。
不过应用稍微有点变化的时候就会碰上一些问题,在这边先介绍过去遇过的项目
名词与缩写说明
NavMesh: Navigation Mesh
NBV: Navigation Bounds Volume,用来定义navigation mesh的范围。
P-Level: Persistent Level。 主地图。
Sublevel: 放置于主地图下的子地图。
如何调整NavMesh的大小
虽然一般都会调整NBV的scale,不过并不建议这么做。
Volume类型的个人都建议调整Brush内的大小,不要改Actor的scale。
NavMesh到底存在哪边?
NavMesh实际上存在于有NBV的场景的umap内。
不是场景的BuiltData,也不一定是主地图。
举例来说
主地图 (1个NBV)
sublevel1 (0个NBV)
sublevel2 (0个NBV)
sublevel3 (2个NBV)
当Build完NavMesh之后,主地图与sublevel3都需要存盘。
我可以在Build的时候排除sublevel吗?
可以,在Build之前把sublevel设隐藏的话,就可以排除掉,如下图所示
sublevel隐藏的时候Build Path,就不会排除方块(图1.)。
sublevel显示的时候Build Path,会排除方块(图2.)。
[图]
图1. 隐藏Sublevel build path
[图]
图2. Sublevel1内的方块被考虑进去并视为不可行走。
有Nav Mesh删不掉
有的时候会看到场景里面有不该存在的Nav Mesh,而且不管怎么重Build都删不掉。
我找到了重现步骤如下:
1. 开启一个新的Level File->NewLevel->Default
2. 放置Nav Mesh Bounds Volume (NBV) 于场景内,并与地板有交叠。
[图]
3. Build->Build Paths (或是引擎自己会auto build navigation)
4. 确认Nav Mesh有出现
5. 直接删除步骤2的NBV
6. Build->Build Paths (或是引擎自己会auto build navigation)
7. Bug发生,Nav Mesh不会因为NBV删掉而消失
解决上面的问题的步骤
1. 放置Nav Mesh Bounds Volume (NBV) 于场景内,并与地板无交叠。
[图]
2. Build->Build Paths (或是引擎自己会auto build navigation)
3. 确认Nav Mesh消失
4. 删除步骤1的NBV
5. 完成
这个问题看起来只要确认,在删地图内最后一个NBV之前,
有确保NavMesh有清除,再删掉NBV就好。
但是实际上有很多问题
如果有很多sublevel,这个确认就会变得非常浪费时间。
总共要做下面几件事:
对所有sublevel
如果sublevel没有NBV
放置NBV于不会产生NavMesh的地方
Build Paths
sublevel存盘
NavMesh能不能存放在streaming的sublevel
非Always loaded的sublevel,例如Blueprint可控制的sublevel,
或是World Composition模式的sublevel。
都必须遵照以下的步骤设定,中间步骤有少或是出错都会有问题。
后果有以下几种现象,我都遇过
NavMesh直接消失
Editor看的到,执行Play in Editor看不到NavMesh
关掉Editor重开后就看不到NavMesh
每次执行NavMesh都不一样,有时位置错,有时有些区域没出来。
正确设定Streaming sublevel的NavMesh
1. 放置一个NBV在P-Level中,可以不需要跟任何东西交集。
之后都不可删掉此NBV。
2. 选择P-Level内自动产生的RecastNavMesh Actor。
3. Runtime Generation 设为Static。
4. Fixed Tile Pool size设为true。
5. Tile Pool size有可能需要随着地形大小调大。
6. 在子地图放置NBV。
注意事项
你也不能单独打开子地图,对任何子地图Build Path后存盘。
一旦这么做,在读主地图的时候就会产生两个以上的
RecastNavMesh Actor(主地图+子地图)
然后就会错乱,NavMesh就不正常了。
因为这个原因,个人极度不建议在这种使用情境打开
auto build navigation的功能,
只要有人单独编辑子地图,触发Build Path并存盘,
这样那个子地图的NavMesh就会坏了。
作者: metallican (钢铁人)   2020-11-19 23:50:00
作者: coolrobin (泳圈)   2020-11-20 00:35:00
作者: a75091500 (凱洛がいらく)   2020-11-22 15:37:00
这个后面说到的问题我好像看过,就是看得到Navimash可是AI会乱走
作者: FukadaKyoko (小毛哥)   2020-11-26 13:10:00
叶德泥
作者: heavendemon   2020-11-29 18:31:00
push

Links booklink

Contact Us: admin [ a t ] ucptt.com