NavMesh简单测试

2015年03月15日 18:21 0 点赞 0 评论 更新于 2025-11-21 17:14

Unity 3.5 版本并未带来新的图形用户界面(GUI),这着实让我有些失落和郁闷。不过,其内置的寻路系统倒着实给了我不少惊喜。我已将相关测试内容打包,下面是该测试包的信息:

  • 测试包名称:TestNavMesh.unitypackage

简要说明

导入与场景设置

导入该包后,按以下步骤操作:

  1. 打开场景 Game_TestNavMesh。通过 Window -> Navigation 打开 Navigation 窗口,此时你能看到舞台上我已经完成烘焙(Bake)的图形。
  2. 对于场景中的障碍物,需将其设置为 Navigation Static,这样 NavMesh 系统才能正确识别障碍物,规划合理的路径。
  3. 将脚本附着在 Main Camera 上。

脚本代码详解

以下是一段关键脚本的详细说明:

NavMesh.CalculatePath(startPosition.position, endPosition.position, 255, path);
points = path.corners;

iTween.MoveTo(mover, iTween.Hash(
"path", points,
"time", 5,
"orienttopath", false,
"looktime", 0.6,
"easetype", "easeInOutSine",
"loopType", "pingPong"
));
  • NavMesh.CalculatePath 方法:该方法用于计算从 startPositionendPosition 的路径。其中,255 是代理类型的掩码,这里表示使用所有可用的代理类型。计算结果会存储在 path 对象中。
  • path.corners:这是一个 Vector3 数组,它包含了计算得到的路径上的所有拐角点。将其赋值给 points 变量后,我们就可以使用这些点来控制物体的移动。
  • iTween.MoveTo 方法:这是 iTween 插件提供的一个方法,用于让物体 mover 沿着指定的路径移动。具体参数解释如下:
  • "path":指定移动的路径,即前面计算得到的 points 数组。
  • "time":表示移动所需的总时间,这里设置为 5 秒。
  • "orienttopath":设置物体是否沿着路径方向旋转,false 表示不旋转。
  • "looktime":表示物体在移动过程中转向目标的时间,这里设置为 0.6 秒。
  • "easetype":指定移动的缓动类型,"easeInOutSine" 表示使用正弦曲线进行缓动,使移动更加平滑。
  • "loopType":指定循环类型,"pingPong" 表示物体在路径两端之间来回移动。

路径优化

对于获取到的 points 数组,我们可以进一步进行优化处理。例如,当 points 数组中任意两个 Vector3 向量之间的距离小于某个特定值时,我们可以删除其中一个点,从而使路径节点更加优化,减少不必要的移动点。

测试代码说明

需要注意的是,void Update () 里的代码是结合 void OnDrawGizmos() 使用的(移动场景中的两个球可以看到效果),这些代码仅用于测试目的。部分读者请勿被此误导,正确的做法是将重新计算路径的操作绑定到某个事件上,例如用户点击、物体碰撞等,这样可以提高性能和用户体验。

作者信息

boke

boke

共发布了 3994 篇文章