Unity - 新版NavMesh动态烘培

Unity - 新版NavMesh动态烘培


Unity的新版NavMesh更加易用效率更高,而且支持动态烘培,这一点特别重要,可以很简单的就实现很多之前处理起来比较复杂的功能。比如现在有个需求,怪物追随玩家,碰到陷阱后玩家跳过,怪物无法跳过碰到陷阱则死亡,但是后续的怪物可以踩着尸体过去。

这个功能之前的实现可能是这样的:在陷阱边缘停止导航,手动控制移动,碰到陷阱死亡停留原地变成地面…现在用新版NavMesh的动态烘培,只要很少的代码就可以实现了。

动态烘培

准备:从官方Github下载源码,拷贝如下代码:

Assets\Examples\Scripts\LocalNavMeshBuilder.cs
Assets\Examples\Scripts\NavMeshSourceTag.cs
Assets\NavMeshComponents下所有文件
注意这些代码都可以根据需求直接修改
  1. 添加LocalNavMeshBuilder,设置动态烘培的区域。
    Unity - 新版NavMesh动态烘培_第1张图片
  2. 对动态烘培的物体,添加NavMeshSourceTag,注意默认的动态烘培是根据物体的Mesh计算的,也支持根据包围盒包围球,需要自己改代码。静态的物体不要勾选Batching Static。
  3. 动态烘培不需要加NavMeshSurface,但加上可以在编辑器界面看效果。
  4. 实现上述需求只需碰到陷阱时关闭NavMeshAgent,并添加NavMeshSourceTag就行。
    Unity - 新版NavMesh动态烘培_第2张图片

不过不知道新版NavMesh为什么不直接集成在编辑器中,可能因为还有Bug,比如最近碰到的动态烘培时烘培的物体运动时超过了初始时的最低点,导航网格会抖动的问题,解决办法是把后面的墙当作动态烘培的对象但是对游戏内容没有影响,高度拉高一点运动时不超过下线就可以。
Unity - 新版NavMesh动态烘培_第3张图片

新版NavMesh链接:https://github.com/Unity-Technologies/NavMeshComponents

你可能感兴趣的:(Unity,Script)