美文网首页
Navigation 分层寻路

Navigation 分层寻路

作者: Levi_Wan | 来源:发表于2016-12-14 12:38 被阅读297次

分层寻路

  • 在我们的实际开发过程中,往往有很多复杂的情况,如船只能在水面上行驶,不能再陆地上行驶,这时我们就需要进行导航区域的设置,进行分层寻路。

在我们游戏中可以将Navigation划分为几个区域,并定义游戏角色可以在哪些区域进行行走,以达到分成寻路的结果。(总共可以定义32组区域)

Paste_Image.png
  • name为层名,这里自定义一个water的层
Paste_Image.png
  • Cost为寻路成本:物体从起点到终点需要消耗的行动力(行动力等于距离乘以寻路成本)
Paste_Image.png

当新添加层以后,可以在之前的 Navigation Object面板中Navigation Area中选择新的层。

Paste_Image.png
  • 搭建一个场景,分别添加水层(Water)(粉红色),沼泽层(Wetlands)(绿色)
Paste_Image.png
  • 接着找到我们的Player,将它NavMeshAgent组件的Area Mask中water取消勾选。
Paste_Image.png
  • 并将 Wetlands的寻路成本设置为10。
Paste_Image.png
  • 运行游戏,我们发现在Area Mask中取消勾选了Water以后,导航时就会不经过Water。但Wetlands是可以走的。但是寻路路径发生了变化。
Paste_Image.png
  • 我们来看一个更关键的问题。

  • 图中深棕色的箭头理应是最短路径,但Navigation给我们计算的路径却要绕一圈是为什么?

  • 因为我们已经修改了Wetland的寻路成本为10,Navigation自动计算了两条路线的寻路成本,选择了较小的一条进行导航。

此时如果添加了一堵墙阻断了路线。

Paste_Image.png
  • Player则只能从选择成本最高也是唯一一条路线去抵达目标点。
Paste_Image.png

通过脚本来对导航区域可行走路线进行更改。

  • 首先介绍一下,Unity中是通过int32来对Area的数据类型进行保存的。
Paste_Image.png
  • 我们可以通过nav变量来获取AreaMask。
Paste_Image.png
  • 通过API可以看到AreaMask为int类型的属性


    Paste_Image.png
  • 接着通过左移运算符,和NavMesh.GetAreaFromName方法来获取层。

Paste_Image.png

该运算表示将1左移多少位,这里Walkable是0层,也就是左移0位,结果还是1

  • 运行游戏前将 Area Mask改为Everything
Paste_Image.png
  • 运行游戏可以发现,此时即使在游戏运行前勾选的是everything,本应可以行走的,现在却无法在water层上进行行走,(因为此时Area Mask发生了变化)现在只能在Walkable层上行走。
Paste_Image.png Paste_Image.png
  • 如果此时想让角色也可以在其他层进行行走,可以通过按位运算符进行更改。是它可以通过沼泽地层。
Paste_Image.png
  • 此时可以在沼泽地上进行行走。
Paste_Image.png Paste_Image.png
  • 如果在可行走的区域,删除它的行走权限呢?(通过按位与(&)运算符)
  • 找到沼泽地层,并将它进行取反~。
Paste_Image.png
  • 运行游戏,发现沼泽地无法行走了
Paste_Image.png

相关文章

  • Navigation 分层寻路

    分层寻路 在我们的实际开发过程中,往往有很多复杂的情况,如船只能在水面上行驶,不能再陆地上行驶,这时我们就需要进行...

  • 6.2 AI寻路 navigation - 听觉

    AI获取坐标参考 > 6.AI寻路navigation - 视觉

  • Navigation导航寻路

    NavMesh简介 unity 中使用Navigation作为解决方案。 寻路(驱动一个游戏物体移动到目标位置上)...

  • 寻路之Navigation

    在unity中,通常会使用导航网格(Navigation)做寻路,但有时也会对场景直接划分格子,并自己实现A*算法...

  • Unity之寻路navigation

    1.打开寻路设置窗口 Window -> Navigation 2. 建立地形,生成寻路网格 Create Pla...

  • VR开发 -- Navigation寻路

    一、什么是寻路? 寻路顾名思义就是:角色在到达指定地点的过程中遇到障碍物会自动避开并自行选取最短的路程进行移动。大...

  • VR开发 -- Navigation寻路

    一.什么是寻路? 寻路顾名思义就是:角色在到达指定地点的过程中遇到障碍物会自动避开并自行选取最短的路程进行移动。大...

  • 寻路blog Navigation Mesh

    http://www.cnblogs.com/yaukey/p/rts_unit_traverse_size_ba...

  • 使用recast navigation

    参考网站 服务器使用recast navigation 游戏服务器3D寻路应用-RECASTNAVIGATION ...

  • Navigation自动寻路技术(一)

    写在前面 第一篇:测试工具的定制Navigation是Unity内置的寻路解决方案 场景图 注:蓝色的小旗是路径点...

网友评论

      本文标题:Navigation 分层寻路

      本文链接:https://www.haomeiwen.com/subject/ahjimttx.html