一、概述:

NavMesh是3D游戏世界中用于实现动态物体自动寻路的一种技术,他将游戏场景中复杂的结构组织关系简化为带有一定信息的网格,

进而在这些网格的基础上通过一些列的计算来实现自动寻路。

二、简单的应用

1、在场景中搭建以下模型;

                          

2、选中这三个物体,在Inspector面板中的右上角的Static旁的小三角中选中Navigation Static,切记,一定要选择这个,不然不能正确的渲染导航网格。

                                

3、接下来打开Navigation视图(Window-->Navigaion),单击Navigation视图中右下角的Back按钮来进行导航网格的生成,其中蓝色的便是生成的导航网格。

                              

4、这样我们的导航网格就完工了,那么接下来我们添加一个主角,并为其添加导航组件(Nav Mesh Agent),这时在在主角上会出现绿色的包围圈。

5、再在场景中添加一个Target物体,让我们的主角来朝向其运动,来观察导航是如何实现的。

                             

6、在主角的物体上添加以下脚本,用来控制其向Target的运动。

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI; public class Run : MonoBehaviour
{ public Transform target;
void Start()
{
GetComponent<NavMeshAgent>().destination = target.position;
} }

7、将Target物体拖动到脚本中的属性中,完成赋值。点击运行游戏,既可以看到主角在朝向Target运动了。

8、如果想要主角可以从底下通过,以最少的路径找到Target,则可以设置主角的Navigation-->Bake-->Agent Height的值,

如果通过Bake可以在桥底下看到有蓝色的显示,则运行游戏主角就可以从桥底穿过了

9、如果想要主角可以从上面直接跳下来的话,则需要选中所有的用作寻路导航的静态物体,在Navigation-->Object-->选中Generation OffMeahLinks,

然后在设置Bake中的Drop height的值即可。

三、使用Off-Mesh-Link组件:

通俗的说,就是一个用来进行隔空传送的通道,当两个寻航网格不在同一的平面上时,就可以使用这个来解决,可以方便的进行传送。

1、创建以下场景:

                            

2、选择其中的一个关键点,为其添加Off Meah Link组件,然后将两个关键点赋值到相关的属性中。

3、然后再进行Bake,这时就会在两个关键点之间有一条线进行连接了。

4、为起始位置添加Run脚本,就是上篇的脚本,然后将重点位置进行真确的赋值。

5、运行游戏,则可以看到起始位置的球通过关键路径移动到终点位置。

                            

四、为网格分层:

创建以下场景:

                           

为中间的两个桥分别设置其的网格层为:Navigation-->Areas-->User 3 =Bridge1/Bridge2.

                            

然后进行Bake,则场景中的寻航导路的显示如图;

                    

接下来为其添加起始和开始位置的显示,并按上面的步骤为起始主角添加Nav Mesh Agent和Run脚本,并进行相应的配置,重复的就不说了,这里的重点是:

                                

area Mask:这个选项用来控制那些寻路网格的使用,具体的效果可以修改这个Bridge1和Bridge2的选中状态就可以看到效果了。

五、Navmesh Obstacle组件:

该组件比较适合处理动态路障的问题。

创建以下场景;

                      

场景中的两个红快分别是起始位置和终止位置,按照前面的步骤为桥面进行寻航网格的Bake,

同时为起始角色添加Run 脚本和Nav Mesh Agent,并完成相应的赋值。接下来为桥面附加Nav Mesh Obstacle组件,并未其附加Bridger脚本;

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Bridger : MonoBehaviour { void Start()
{
StartCoroutine(Init());
}
IEnumerator Init()
{
GetComponent<Renderer>().enabled = false;
yield return new WaitForSeconds(1f);
GetComponent<NavMeshObstacle>().enabled = false;
GetComponent<Renderer>().enabled = true;
}
}

此时预览游戏,既可以发现,只有当中间的桥出来的时候,玩家角色才开始向终点位置移动。

六、参数解释

1、Object(物体)参数面板:

                              

  • Navitation Static :旋中该复选框,则表示该游戏对象将参与导航网格的烘焙。
  • Generate OffMeshLinks:选中该复选框,可以自动根据Drop height和JumpDIstance的参数设置用关系线来连接分离的网格。
  • Navitation Area;导航区域设置

2、Bake(烘焙)面板;

                             

Agent Radius:具有代表性的物体半径,其半径越小,生成网格的面积越大,越精确。

Agent Height;具有代表性的物体高度

Max Slope:最大可行进的斜坡角度

Step height:可行走的台阶高度

Drop Height:允许下落的最大下落距离

Advanced:高度参数调节;

  • Manual Voxel Size:选中手动输入像素值
  • Voxel Size :输入像素值            【注意;值越小,烘焙的越精确但是烘焙的时间会增多,要慎用】
  • Min Region Area :网格面积小于该面积的。将不生成寻航网格
  • Heiht Mesh:选中该参数,会保存高度信息,但是会损失性能,要慎用

3、Nav Mesh Agent(导航组件)面板;

                              

Agent SIze;尺寸控制

  • Radius:物体的半径
  • Height:物体的高度
  • Base Offset:偏移量

Steeing :行动控制

  • Speed:物体的行进最大速度
  • Angular Speed:行进过程中的转向的角速度
  • Acceleration;物体的旋转加速度
  • Stopping Distance:距离目标点小于多远距离后边停止行进
  • Auto Braking:选中后自动制动,类似于缓慢刹车的效果

Obstacle Avoidance:躲避障碍参数:

  • Quality:质量
  • Priority:优先级
  • Path Finding:路径寻找

                                                                                                2017-12-19、01:34:44

NavMesh--导航网格寻路的更多相关文章

  1. 【Unity】12.2 导航网格寻路简单示例

    开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 本节通过一个简单例子,演示如何利用静态对象实现导航网格,并让某个动态物体利用导航网格自动寻路, ...

  2. Unity NavMesh导航网格 初级教程

    目的:要实现的功能就是你点击一下地图上的某个地方,人物就向着那个点移动.有点自动寻路的味道.  例子:三国群英传,三国赵云传之类的游戏里面的人物移动就可以用这个实现.还有一个我不太喜欢玩的游戏英雄联盟 ...

  3. Unity3D 导航网格自动寻路(Navigation Mesh)

    NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...

  4. [原]Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)

    NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...

  5. A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)

    在Unity3d中,我们一般常用的寻路算法:   1.A*算法插件   与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不 ...

  6. 关于Unity中网格导航与寻路

    寻路思路 1.烘焙出地形数据,导航数据,区分哪些是路径,哪些是障碍物 2.给要寻路的角色添加寻路的组件,加好了以后就会有速度和目的地之类的参数设置 3.只要设置好目的地,角色就会根据烘焙好的地图自己走 ...

  7. 【Unity】第12章 导航网格和寻路

    开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 NavMesh(导航网格)是3D游戏世界中用于实现"动态"物体自动寻路的一 ...

  8. 03、NavMesh--导航网格寻路

    一.概述: NavMesh是3D游戏世界中用于实现动态物体自动寻路的一种技术,他将游戏场景中复杂的结构组织关系简化为带有一定信息的网格, 进而在这些网格的基础上通过一些列的计算来实现自动寻路. 二.简 ...

  9. Unity导航 (寻路系统Nav Mesh Agent)

    第一种 简单寻路 地面接触到的.到达目标点不用跳跃能够一直走路到达.场景视图中简单搭设几个物体.胶囊体为寻路者,黄球为目标点 红地板,绿色障碍物.现将地板以及障碍物选中 在检视面板设置静态为Navig ...

随机推荐

  1. Grunt打包seajs项目

    在使用seajs时,常常将若干脚本分为多次require进来,这样开发中比较方便,但是,会增加http请求次数,在生产环境中需要进行打包合并.压缩等操作. 以Grunt构建工具为例,对一个seajs项 ...

  2. php缓存模块apc可能导致php-fpm终止

    如果你的网站出现502错误.同时你网站中又使用了apc模块来做缓存处理.那么这篇文章兴许能帮到你. 首先,查看了php-fpm 的进程数. 发现php-fpm的进程数已经到达了php-fpm.conf ...

  3. 技嘉 gigabyte b75m d3v 主板 定时开机无效问题解决

    BIOS 里面设置定时开机后发现到点并没有正常启动~~~  百思不得解.后来发现原来是WIN8系统下的控制面板的关机并非正常关机,而是不保存设置的非正常关机,在开始菜单右键——关闭或注销——关闭计算机 ...

  4. JS中的循环---最全的循环总结

    在讲循环的之前,先知道一下循环结构的执行步骤 1.声明循环变量: 2.判断循环条件; 3.执行循环体操作: 4.更新循环变量: 5.然后循环执行2-4,直到条件不成立,跳出循环. 1while循环 v ...

  5. eclipse中导入jsp等工程使用过程中常遇问题

    1.导入的工程JSP文件出现报错的情况 这个一般不怎么影响文件的执行,这些文件飘红主要是因为eclipse的校验问题. 具体错误信息:Multiple annotations found at thi ...

  6. yaml在python中的应用简单整理

    #简单介绍============================================================== YAML使用寄主语言的数据类型,这在多种语言中流传的时候可能会引 ...

  7. ionic开发环境搭建之android及问题

    1. 准备工作: a)     配置java开发环境 b)    配置安卓开发环境 注:下载android-studio后,可能会出现android一直在编译,出现这种情况,关掉你的as ,找到你的路 ...

  8. Minecraft

    描述 Minecraft是一个几乎无所不能的沙盒游戏,玩家可以利用游戏内的各种资源进行创造,搭建自己的世界. 在Minecraft中,基本的建筑元素是边长为1个单位的立方体,Tony想用N个这种小立方 ...

  9. Python之int内部功能介绍

    int内部功能的介绍 type(): 1.基本数据类型使用type()函数时,得到相应的数据类型a = 12b = 12.01c = "123"print(type(a)) > ...

  10. Servlet&JSP-HTTP服务器响应信息

    完整代码请参考:https://github.com/devway9/java-exercise/tree/master/servlet-jsp 目录 1 HTTP响应的格式 2 如何设置状态代码 3 ...