精华内容
下载资源
问答
  • Unity NavMesh 2D寻路 此仓库是2D中Unity NavMesh和寻路概念的证明。 它探讨了NavMeshComponents功能。 ( ) 信息 建立 您可以通过两种不同的方式使用它:下载该存储库或将其添加到项目的Package Manager清单中。 ...
  • DotsNav是基于DOTS构建的完全动态且健壮的平面导航网格Unity软件包。 它足够快地在每个帧中添加和删除许多障碍,支持任何规模的代理,并且可以通过单行为来使用,而无需事先了解DOTS。 DotsNav处于开发的早期阶段。...
  • 主要为大家详细介绍了Unity3D实现NavMesh导航网格寻路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Unity新版NavMesh的案例资源,包含代码、案例 最大的亮点在于支持动态烘焙,可用在运行时根据人物的位置来动态烘焙人物周围一定区域内的场景
  • Unity新版NavMesh组件使用文档,可运行时烘焙导航网格
  • Unity3D中寻路Navmesh的简单介绍

    千次阅读 2019-06-24 19:50:50
    这里介绍U3D自带的Navmesh。 1.地形 首先新建一个Plane当地表。 然后在Plane上随意摆放些几何物体当作障碍物(注意预留能够让角色通过的路径)并给这些障碍物添加rigidbody。 将这些障碍物同地表打组(把障碍物...

    在游戏中经常会需要用到寻路,Asset Store里面有很多相关插件。这里介绍U3D自带的Navmesh。

    1.地形

    首先新建一个Plane当地表。

    然后在Plane上随意摆放些几何物体当作障碍物(注意预留能够让角色通过的路径)并给这些障碍物添加rigidbody。

     将这些障碍物同地表打组(把障碍物拖到Plane下为子物体),以方便接下来操作。

    选中Plane组,打开Navigation窗口,勾选Navigation Static,提示同时设置子物体,点确定。

     

    点击Navigation面板下的Bake,会提示保存场景,确定并保存。

    烘培完后如图(蓝色部分即为可以通过的路径):

    如果烘培出的路径不合理,可以调整障碍物后再烘培。

     将Plane及其子物体的tag设为Terrain。

    2.角色

    添加一个Capsule当角色。同样给它添加rigidbody组件。

    新建脚本CharacterController:

     1 public class PlayerController : MonoBehaviour
     2 {
     3 
     4     private NavMeshAgent agent;
     5 
     6     // Use this for initialization
     7     void Start ()
     8     {
     9         agent = GetComponent<NavMeshAgent>();
    10     }
    11     
    12     // Update is called once per frame
    13     void Update () {
    14 
    15         //鼠标点击场景设置目标点
    16         if (Input.GetMouseButtonDown(0))
    17         {
    18             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    19             RaycastHit hit;
    20             //如果点击目标点为地形
    21             if (Physics.Raycast(ray,out hit))
    22             {
    23                 if (!hit.collider.tag.Equals("Terrain"))
    24                 {
    25                     return;
    26                 }
    27 
    28                 Vector3 point = hit.point;
    29                 //角色转向
    30                 transform.LookAt(new Vector3(point.x,transform.position.y,point.z));
    31                 //设置目标点
    32                 agent.SetDestination(point);
    33             }
    34         }
    35 
    36         //正在行走,则输出提示
    37         if (agent.remainingDistance > 0)
    38         {
    39             Debug.Log("seeking");
    40         }
    41     }
    42 }
    View Code

     

    运行场景,点击目标点,看看是不是寻路成功。

    转载于:https://www.cnblogs.com/seancheung/p/4028231.html

    展开全文
  • unity自带寻路Navmesh入门教程(一)

    万次阅读 2018-08-01 09:08:59
    unity自从3.5版本之后,增加了NavMesh寻路的功能。在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能。阿赵我也使用过A*寻路插件,A*的原理并不复杂,有兴趣的朋友可以自己百度一下。不过由于...
     unity自从3.5版本之后,增加了NavMesh寻路的功能。在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能。阿赵我也使用过A*寻路插件,A*的原理并不复杂,有兴趣的朋友可以自己百度一下。不过由于不是自带的功能,所以在设定网格和烘焙的过程难免会出现很多不便。NavMesh作为unity自带的功能,用法和之前的LightMapping烘焙或者遮挡剔除Occlusion Culling有很多相似之处。
    

    这里写图片描述
    这个功能有很多有趣的地方,而且用起来也很方便,我打算分开几篇日志来逐一介绍。这次的目的只是简单的认识一下NavMesh的基本用法,所以暂时不详细的翻译组件每一个参数和功能的意思。

      先来看看怎么在unity打开NavMesh功能的窗口吧:
    

    在window下拉列表中可以看到Navgation,点击:
    这里写图片描述
    在原来Inspector面板的旁边会出现Navigation的面板:
    这里写图片描述
    这个Objcet的面板是对应当前选择的物体的,旁边的Bake面板是对应全局选项的。结构和烘焙或者遮挡剔除是一样的。在选择了物体的情况下会出现上面的内容:
    上面的All、MeshRenderers、Terranis是对Hirarchy面板里面显示的物品选择的一个筛选过滤:
    all就是全部显示
    MeshRenderers是只显示可渲染的网格物体
    而Terrains当然就是只显示地形物体了。

    下面的是重要的选项,第一个Navigation Static选项是选择该物体是否用做寻路功能的一部分。只有勾选了这个选项,下面的其他选项才会可操作。
    这里写图片描述
    OffMeshLink Generation选项是选择该物体是否根据高度、可跳跃宽带等全局的选项自动生成OffMeshLink,这个会在以后的讲解中详细说明,这次就暂时不讨论。
    Navigation Layer是对参与寻路功能的地图物体的一个分类,用层来分类,默认有三个层可以选择,当然也可以自己添加层。
    旧版本:在Edit下拉列表,选择Project——NavMeshLayers
    这里写图片描述
    注意:在4.几的新版本后,这个寻路层管理打开的位置发生了变化,变成了在Navigation 面板里面了:
    这里写图片描述

    出现了NavMesh层的管理界面:
    这里写图片描述
    上面三个Buit-in Layer是系统默认的三个可选择层,我们可以在下面的User Layer里面输入自己需要的层的名称,比如我现在输入一个叫做“brigde”的层
    这里写图片描述

    这时候,刚才输入的“bridge”层,就会出现在可选择的列表里面

    通过刚才的几步,NavMesh常用的几个面板我们都已经操作过了,接下来可以做一个小例子:
    这里写图片描述
    在场景里面,我放了一个摄像机(Camera),一个充当地面的面片(plane),一个角色模型(man)和一个目标点物体(target)
    为了便于观察目标点的位置,我在目标点物体身上添加了Light组件让它会发光。角色模型(man)身上必须添加NavMesh组件,不然就不能寻路了。为了方便,我使用了官方的大兵模型,里面已经带有了动画和动画控制的脚本。不过这些动画的表现暂时是不重要的,你可以选择放一个胶囊或者Cube代替人物的模型。
    这里写图片描述

    还记得刚开始介绍的Navigation面板吗?选择地面(plane),在Navigation面板里面里面勾选Navigation Static选项,其他的默认不改动。
    然后点击右下角的Bake面板。这时候会有一个计算的过程,曾经用过烘焙或者遮挡剔除的朋友应该对这个过程很熟悉了。
    不过和之前两个功能一样,如果你没有保存场景level,unity会提示你先保存,然后再bake。
    由于现在场景里面的物体很少,所以Bake的过程很快就结束了。
    这里写图片描述
    留意看scene视窗,现在地面的颜色已经发生改变了,这是因为unity已经帮你生成了寻路用的NavMesh网格,由于现在没有遮挡的阻碍物,所以整个地面都是属于可以行走的范围。
    这里写图片描述
    写一个最简单的控制脚本吧,以上是C#,由于很简单,估计用Js的朋友也能对应的写出来。
    简单的解释一下,这个脚本是直接拖放到角色(man)身上的,并把场景中的目标物体(target)拖放指定到该脚本的target变量上面进行了赋值。在脚本一开始的时候,我 先获取了man身上的NavMeshAgent脚本组件,然后在Update的过程中,man不断的进行对target的位移的一个寻路并移动到目标位置的操作。

    在进行完以上的操作后,你应该已经可以点击unity的播放按钮,然后移动目标物体(target),这时候角色模型已经可以追着目标点跑了。
    这里我还做了一个简单的鼠标点击plane设定目标点的功能,由于这个功能不在这次的讨论范围内,所以有兴趣的朋友可以自己去百度一下具体的方法。
    这里写图片描述

    进行到这一步,人物已经跑起来了,但由于没有遮挡的障碍物,所以人物只是会直线的行走,看不出寻路的感觉。接下来我们就做点更复杂的:
    这里写图片描述
    在场景里面添加一个Cube做为障碍物,具体的形状和位置请根据自己喜欢来调节,阿赵我是把它做成了一个长方形,并摆在了角色面前。
    这里写图片描述
    和刚才对地面的操作差不多,选择遮挡物Cube,在Navigation面板里面勾选Navigation Static选项,这次的Navigation Layer要选择Not Walkable。顾名思义,这是不能行走的意思,代表了这个Cube是不能通过的。
    选择完成后,我们再次点击Bake,又是一个小等待的过程。
    Bake完成后,我们回到scene视窗。
    这里写图片描述
    观察scene视窗,会发现刚才整个地面都是NavMesh的情况已经改变了,在障碍物的周围,NavMesh留出了一个缺口,这代表了角色已经不能从障碍物身上通过了。

    再次点击unity的播放按钮
    这里写图片描述
    现在可以看到,人物已经可以绕着障碍物走了,我们的目的已经顺利达到了。

      这次的例子就到此结束了。
      在第二节里,我会详细的讲解高低落差、爬梯子以及跳跃等较为复杂一点的功能。然后会在第三节里面讲解分条件的寻路(不同人走不同的路),以及动态控制道路(如吊桥)等的功能。
    
    展开全文
  • Unity寻路导航NavMesh

    2020-05-23 15:52:12
    寻路导航NavMesh Unity中对于寻路算法进行了封装,支持提交将地图进行导航烘焙,降低了实时计算的消耗 菜单Window–>Navigation,打开导航面板 操作 选择不移动的游戏对象,勾选Navigation Static 如果是不连接的...

    寻路导航NavMesh

    Unity中对于寻路算法进行了封装,支持提交将地图进行导航烘焙,降低了实时计算的消耗
    菜单Window–>Navigation,打开导航面板

    操作

    • 选择不移动的游戏对象,勾选Navigation Static

    • 如果是不连接的游戏对象,勾选 Generate OffMeshLinks

    • 如果需要设置区域,可以在属性 Navigation Area下选择,使用方式与层一样

    • 点击Areas标签,可以添加区域,内置创建了三个区域,表示可以行走、不可以行走、可跳跃

    • 选择完成后,点击Back按钮完成烘焙,点击 Clear按钮清除已烘焙的数据

    Demo

    建立一个简单的demo来演示寻路导航效果,在一个拥有一堵墙的平面上,要求使用navigation自动导航将小球运动到鼠标点击的位置。

    建立的场景如图:

    在这里插入图片描述

    将平面设置为walkable、墙设置为unwalkable.生成的导航线路图如蓝色区域。

    在这里插入图片描述

    为小球添加Nav Mesh Agent组件,已完成自动导航功能。

    编写c#脚本完成相应功能:

    public class NavMeshDemo : MonoBehaviour
    {
        private NavMeshAgent agent;
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetButtonDown("Fire1")) {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, 100f)) {
                    agent.SetDestination(hit.point);
                }
            }
        }
    }
    

    在这里插入图片描述

    分层区域导航

    根据不同的分层区域可以为物体设定不同的导航路线,下列是实现改分层区域导航的demo。通过为不同颜色小球设定不同颜色通行的路径来进行分层区域导航,使得小球可以到达方块的位置。

    为不同的路径设定不同的area:

    在这里插入图片描述

    在这里插入图片描述

    为不同颜色小球设定不同的Area Mask,以红色小球为例:

    在这里插入图片描述

    为小球建立相应的脚本:

    public class NavMeshAreaDemo : MonoBehaviour
    {
    
        private GameObject cube;
        // Start is called before the first frame update
        void Start()
        {
            cube = GameObject.Find("Destination");
            GetComponent<NavMeshAgent>().SetDestination(cube.transform.position);
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
    }
    

    最终的效果图:

    在这里插入图片描述

    动态区域导航

    接下来的demo展示了如何进行动态的区域导航,通过建立一个类似于桥型的结构,如下图所示,中间蓝色部分的桥每隔一段时间会抬起或者放下,有一个小球从左边走到右边,但是在桥抬起的时候无法走过去。

    在这里插入图片描述

    先建立对应的场景,使得平面可以定时绕着绿色小球的位置进行旋转。

    //使平面绕着一个球体做旋转
    public class PlaneRotate : MonoBehaviour
    {
        //
        public GameObject ball;
        //所绕球体的坐标
        public Transform spPos;
        //旋转时间间隔
        private float time;
        //计时
        private float time2;
        //旋转角度
        private float rotateAngle;
        //旋转方向
        private int direction;
    
    
        // Start is called before the first frame update
        void Start()
        {
            time = 2f;
            time2 = 0f;
            rotateAngle = 30f;
            direction = 1;
        }
    
        // Update is called once per frame
        void Update()
        {
            time2 += Time.deltaTime;
            if (time2 >= time) {    //每一秒旋转一次
                transform.RotateAround(spPos.position,Vector3.forward,rotateAngle*direction);
                time2 = 0;
                direction *= -1;
                ball.SendMessage("SetAreaMask", 6);
            }
        }
    }
    
    

    然后为小球建立地图烘焙,这里为了增加小球的运动的平顺性,可以生成offmeshlinks,这样在蓝色部分抬起时小球会在红色边缘徘徊等待蓝色部分放下。

    为小球建立导航,这里设置了一个SetAreaMask的方法用来设置对应不能走的AreaMask。当桥抬起来的时候,小球不能走上对应的AreaMask(蓝色部分,对应AreaMask=6),等到桥放下后小球才能继续前行。

    在这里插入图片描述

    //小球的导航
    public class BallNav : MonoBehaviour
    {
        //目标位置
        public Transform dest;
        //
        private NavMeshAgent agent;
    
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
            
        }
    
        //设置对应的areaMask
        void SetAreaMask(int areaMask) {
            agent.areaMask = agent.areaMask ^ (1 << areaMask);
        }
    
    
        // Update is called once per frame
        void Update()
        {
            agent.SetDestination(dest.position);
        }
    }
    

    手动编写物体导航demo

    有一个如下图的地图,希望小球可以自动移动到鼠标点击的区域,且梯子只能往上爬。所使用的自动导航off mesh link有三种,一种是手动设置的off mesh link,一种是向下跳,一种是水平跳跃。

    在这里插入图片描述

    后面两种的off mesh link可以在navigation中进行设置:

    在这里插入图片描述

    而手动设置的赋在梯子上的连接线可以通过为梯子添加off mesh link组件来设置。分别在梯子下部和上部放置一个小方块作为start和end

    在这里插入图片描述

    最后编写代码让小球可以运动:

    public class BallMaze : MonoBehaviour
    {
        private NavMeshAgent agent;
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0)) {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, 200f)) {
                    agent.SetDestination(hit.point);
                }
            }
        }
    }
    
    

    但是使用这种方法建立off mesh link的运动效果是一个瞬间移动的效果,并不是想要的效果,因此下一步来手动进行不同物体间的连接线导航。

    实现手动连接效果

    希望对在梯子处导航进行优化,有一个向上爬梯子的过程而不是一个瞬间移动的过程。

    预备知识

    NavMeshAgent对象的成员

    • 属性isOnOffMeshLink:表示是否处于连接线上

    • 属性currentOffMeshLinkData:获取当前所在连接线的数据,返回 OffMeshLinkData类型的对象

    • 方法stop():停止向导

    • 方法Resume():继续向导

    • 方法CompleteOffMeshLink():完成当前连接线OffMeshLinkData对象的成员

    • 属性startPos、 endPos表示开始、结束的位置,结合Vector3.lerp方法进行中间点的插值计算

    • 属性linkType:表示连接的类型, OffMeshLinkType枚举

    将对应脚本改写成如下:

    public class BallMaze : MonoBehaviour
    {
        private NavMeshAgent agent;
        //nav mesh agent 数据
        private OffMeshLinkData data;
        //爬楼梯时长
        private float climbTime;
        //计时器
        private float countTime;
    
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
            climbTime = 2f;
            countTime = 0f;
    
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0)) {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, 200f)) {
                    agent.SetDestination(hit.point);
                }
            }
    
            if (agent.isOnOffMeshLink) {    //判断是否处于边缘的offmeshlink连接线上
                data = agent.currentOffMeshLinkData;    //获取相关数据
                agent.isStopped = true;
                //agent.Stop();   //暂停使用自动导航
                switch (data.linkType) {
                    case OffMeshLinkType.LinkTypeManual:    //手动设定的类型(梯子)
                        countTime += Time.deltaTime;
                        transform.position = Vector3.Lerp(data.startPos, data.endPos, countTime / climbTime);   //在开始位置和结束位置中取相应比例的值
    
                        if (countTime >= climbTime) {
                            countTime = 0f;
                            agent.CompleteOffMeshLink();
                            agent.isStopped = false;
                            //agent.Resume();
                        }
                        break;
                    case OffMeshLinkType.LinkTypeDropDown:  //往下跳
                        break;  
                    case OffMeshLinkType.LinkTypeJumpAcross:    //水平横跳
                        break;
                    
                }
            }
        }
    }
    
    

    最终可以得到一个逐渐向上爬的一个效果。

    在这里插入图片描述

    实现水平跳跃和往下跳的效果

    实现水平跳跃的效果实际上要求在边缘的两点做抛物线运动。在没有刚体的情况下,可以自己写代码来模拟中立的作用。水平方向是匀速的,垂直方向上是v=a*t(v是速度,a是加速度,t是时间).

    添加一个抛物线跳跃的方法:

    void JumpAcross(Vector3 jumpFrom, Vector3 jumpTo) {
            jumpFrom += Vector3.up; //将出发点向上平移
            jumpTo += Vector3.up;   //
            countTime += Time.deltaTime * (moveSpeed / moveSpeedFixed);
            float f1 = countTime / climbTime;
            float f2 = countTime - countTime * f1; // 竖直加速运动
            Vector3 v1 = Vector3.Lerp(jumpFrom, jumpTo, f1); // 水平匀速运动
            transform.position = v1 + f2 * Vector3.up;
    
        }
    

    完整代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.AI;
    
    public class BallMaze : MonoBehaviour
    {
        private NavMeshAgent agent;
        //nav mesh agent 数据
        private OffMeshLinkData data;
        //爬楼梯时长
        private float climbTime;
        //计时器
        private float countTime;
    
        // 实际速度
        private float moveSpeed = 2;
        // 移动速度
        private float moveSpeedFixed = 2; 
    
        // Start is called before the first frame update
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
            climbTime = 2f;
            countTime = 0f;
    
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetMouseButtonDown(0)) {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, 200f)) {
                    agent.SetDestination(hit.point);
                }
            }
    
            if (agent.isOnOffMeshLink) {    //判断是否处于边缘的offmeshlink连接线上
                data = agent.currentOffMeshLinkData;    //获取相关数据
                agent.isStopped = true;
                countTime += Time.deltaTime;
                //agent.Stop();   //暂停使用自动导航
                switch (data.linkType) {
                    case OffMeshLinkType.LinkTypeManual:    //手动设定的类型(梯子)
                        transform.position = Vector3.Lerp(data.startPos, data.endPos, countTime / climbTime);   //在开始位置和结束位置中取相应比例的值
                        break;
                    case OffMeshLinkType.LinkTypeDropDown:  //往下跳  
                        JumpAcross(data.startPos, data.endPos);
                        break;  
                    case OffMeshLinkType.LinkTypeJumpAcross:    //水平横跳
                        JumpAcross(data.startPos, data.endPos);
                        break;
                    
                }
                if (countTime >= climbTime)
                {
                    countTime = 0f;
                    agent.CompleteOffMeshLink();
                    agent.isStopped = false;
                    //agent.Resume();
                }
            }
        }
    
        void JumpAcross(Vector3 jumpFrom, Vector3 jumpTo) {
            jumpFrom += Vector3.up; //将出发点向上平移
            jumpTo += Vector3.up;   //
            countTime += Time.deltaTime * (moveSpeed / moveSpeedFixed);
            float f1 = countTime / climbTime;
            float f2 = countTime - countTime * f1; // 竖直加速运动
            Vector3 v1 = Vector3.Lerp(jumpFrom, jumpTo, f1); // 水平匀速运动
            transform.position = v1 + f2 * Vector3.up;
    
        }
    }
    
    
    展开全文
  • Unity导航网格自动寻路nav mesh
  • Unity NavMeshAgent参数及API

    千次阅读 多人点赞 2020-05-01 17:50:32
    前言:Unity版本为2019.2.9f1 Ppersonal。Unity版本可在上方Help下点击About Unity找到。本文将采用官方文档的英文对比介绍,一些相对简单的参数就不引用官方文档了。由于个人英文水平有限,翻译不到位的地方还请...

    前言:Unity版本为2019.2.9f1 Ppersonal。Unity版本可在上方Help下点击About Unity找到。本文将采用官方文档的英文并对比介绍。由于个人英文和开发水平有限,翻译或解释不到位的地方还请原谅。个别方法鉴于目前还没使用过,不好做过多介绍,只好先贴出来以供暂时理解即可。看完觉得有帮助还请点个赞,还想看其他文章的也请加个关注哦~喵。

    NavMeshAgent

    Properties

    Insepecotr

    This component is attached to a mobile character in the game to allow it to navigate the Scene using the NavMesh. See the Navigation section of the manual for further details.

    该组件附加在游戏中一个可移动的人物上,从而允许它使用NavMesh在Scene中导航。简单地说,该组件提供了自动寻路的功能。

    阅读前须知:

    我们将游戏对象GameObject上挂载的NavMeshAgent组件称为Agent。我们用代码,通过对Agent进行调整来移动GameObject,所以通常来讲Agent指代的就是游戏对象。但Agent依然是一个组件,只不过它控制着GameObject的运动而已。

    我们将地图上Agent可穿行的区域称为NavMesh,即导航网格。
    在这里插入图片描述

    Agent Type

    The type ID for the agent.
    This identifier determines which NavMeshes are available for the Agent to move on. See also NavMeshBuildSettings.agentTypeID. Changing this ID will reset the Agent’s current path.

    这个标识符决定了Agent可以在哪些NavMeshes上移动。另请参见NavMeshBuildSettings.agentTypeID。改变Agent Type将重置Agent的当前路径。

    该设置在Navigation中,Navigation可在Windows下的AI中找到。打开后,就能见到如图所示的Agent Type了。该值的设置相当于人物的分类,比如你可以新建一个Animal的Agent Type,然后设置其相关的属性。这样在寻路时就会表现出与Humanoid不同的特征。
    在这里插入图片描述

    Base Offset

    The relative vertical displacement of the owning GameObject.

    游戏对象的垂直相对位移。即agent的Y轴偏移,正值往下,负值往上。

    Steering(操纵)

    Steering内的参数一般都不在Inspector界面调整它,而是在代码中进行设置。

    Speed(float)

    Maximum movement speed when following a path.

    An agent will typically need to speed up and slow down as it follows a path (eg, it will slow down to make a tight turn). The speed is often limited by the length of a path segment and the time taken to accelerate and brake, but the speed will not exceed the value set by this property even on a long, straight path.

    寻路时的最大移动速度。设置该数值为0并不能使得agent立刻停下,具体见IsStopped。

    Angular Speed(float)

    Maximum turning speed in (deg/s) while following a path.

    This is the maximum rate at which the agent can turn as it rounds the “corner” defined by a waypoint. The actual turning circle is also influenced by the speed of the agent on approach and also the maximum acceleration.

    寻路时的最大转向速度(最大角速度)。值越大,agent的转向越迅速。

    Acceleration(float)

    The maximum acceleration of an agent as it follows a path, given in units / sec^2.

    An agent does not follow precisely the line segments of the path calculated by the navigation system but rather uses the waypoints along the path as intermediate destinations. This value is the maximum amount by which the agent can accelerate while moving towards the next waypoint.

    当agent寻路时的最大加速度。单纯物理意义上的加速度,控制速度变化的快慢。

    Stopping Distance(float)

    Stop within this distance from the target position.

    It is seldom possible to land exactly at the target point, so this property can be used to set an acceptable radius within which the agent should stop. A larger stopping distance will give the agent more room for manoeuvre at the end of the path and might avoid sudden braking, turning or other unconvincing AI behaviour.

    制动距离。当agent与目标点的距离小于它时会自动停下来以免越过目标点。

    Auto Braking(bool)

    Should the agent brake automatically to avoid overshooting the destination point?

    If the agent needs to land close to the destination point then it will typically need to brake to avoid overshooting or endless “orbiting” around the target zone. If this property is set to true, the agent will brake automatically as it nears the destination.

    该属性设置为true时,agent会在到达Stopping Distance时直接停下。否则会出现当agent速度太快冲过目标点时,会缓慢的回到目标点的现象。

    Obstacle Avoidance(障碍回避)

    这下面调节的都是agent空间参数。在Unity中,agent是一个圆柱形的范围空间,所有的AI智能寻路都是基于agent的参数设置。它相当于是一个有着触发器属性(ISTrigger)的Collider,但并不是一个触发器甚至是碰撞器。

    Radius(float)

    The avoidance radius for the agent.

    This is the agent’s “personal space” within which obstacles and other agents should not pass.

    agent的躲避半径。相当于agent的私人空间,在这个半径内其它障碍或agent无法穿过。

    Height(float)

    The height of the agent for purposes of passing under obstacles, etc.

    agent的高度。低于该值的障碍agent都无法穿过。

    Quality(enum)

    设置质量。我也不知道这个有什么用,设置成High Quality就好了。

    priority(int)

    优先级。低优先级的agent会给高优先级的agent让路。

    Pathing Finding(寻路)

    autoTraverseOffMeshLink(bool)

    Should the agent move across OffMeshLinks automatically?

    Off-mesh links are used to connect disjoint regions of the NavMesh. Usually, a character should be able to pass through or traverse a link automatically, which will happen if this property is set to true. However, it can also be set to false in cases where special control over movement is needed.

    分离网格链接指的是两个不相交的导航网格之间的链接路径(比如agent跳过去飞过去等非实地路径)。关于这个的详细内容可以参看这篇博客【Unity】12.3 Off Mesh Link组件。简单来说,该值设置为true的话,agent将可以通过分离网格链接。将其设置为false的话,就需要你手动的给场景中的物体添加Off Mesh Link组件,从而使得agent可以到达其上。

    autoRepath(bool)

    Should the agent attempt to acquire a new path if the existing path becomes invalid?

    A new path calculation is also attempted acquired if the agent reaches the end of a partial and stale path.

    该值默认为true,agent会在到达一条局部或过时的路径末端时重新规划一条路径。如果你希望通过代码来调控它的路径选择,你可以在Start中将其设置为false以免多次计算。

    areaMask(int)

    Specifies which NavMesh areas are passable. Changing areaMask will make the path stale (see isPathStale).

    This is a bitfield.

    该值指明哪些NavMesh是可通行的。

    非Inspector

    avoidancePriority(int)

    The avoidance priority level.

    When the agent is performing avoidance, agents of lower priority are ignored. The valid range is from 0 to 99 where: Most important = 0. Least important = 99. Default = 50.

    回避优先级。当agent执行回避操作时会忽略掉低优先级的agents。0-99都是有效的范围。其中,0是最高优先级,99最低,默认为50。

    currentOffMeshLinkData(AI.OffMeshLinkData)

    The current OffMeshLinkData.

    In the case that this agent is not on an OffMeshLink the OffMeshLinkData is marked as invalid.

    当前的分离网格链接数据。在某种情况下agent不在分离网格的链接上时,分离网格的链接数据会被标记为无效的。

    desiredVelocity(Vector3)

    The desired velocity of the agent including any potential contribution from avoidance. (Read Only)

    agent的预期速度,其中包括任何来自障碍的潜在限制。因此它并不是一个定值。

    destination(Vector3)

    Gets or attempts to set the destination of the agent in world-space units.

    Getting:

    Returns the destination set for this agent.

    • If a destination is set but the path is not yet processed the position returned will be valid navmesh position that’s closest to the previously set position.
    • If the agent has no path or requested path - returns the agents position on the navmesh.
    • If the agent is not mapped to the navmesh (e.g. Scene has no navmesh) - returns a position at infinity.

    Setting:

    Requests the agent to move to the valid navmesh position that’s closest to the requested destination.

    • The path result may not become available until after a few frames. Use pathPending to query for outstanding results.
    • If it’s not possible to find a valid nearby navmesh position (e.g. Scene has no navmesh) no path is requested. Use SetDestination and check return value if you need to handle this case explicitly.
    hasPath(bool)

    Does the agent currently have a path? (Read Only)

    This property will be true if the agent has a path calculated to the desired destination and false otherwise.

    agent是否已经计算出了一条前往预定目的地的路径。

    isOnNavMesh(bool)

    Is the agent currently bound to the navmesh? (Read Only)

    This property is false if the agent, for some reason, could not bind to the navmesh. E.g. if Scene has no navmesh.

    该值为true时表明agent在导航网格上。

    isOnOffMeshLink(bool)

    Is the agent currently positioned on an OffMeshLink? (Read Only)

    This property is useful when autoTraverseOffMeshLink is false and custom movement is needed when crossing the link.

    同上isOnNavMesh。

    isPathStale(bool)

    Is the current path stale. (Read Only)

    When true, the path may no longer be valid or optimal. This flag will be set if: there are any changes to the areaMask, if any OffMeshLink is enabled or disabled, or if the costs for the NavMeshAreas have been changed.

    该值为true表明路径不再有效或者并不是最佳的。当areaMask被改变时,或任意一个分离网格链接被启用或禁用时,或某一导航网格区域的代价被改变时,都会使得该值变为true。

    isStopped(bool)

    This property holds the stop or resume condition of the NavMesh agent.

    If set to True, the NavMesh agent’s movement will be stopped along its current path. If set to False after the NavMesh agent has stopped, it will resume moving along its current path.

    该属性保存agent的停止或恢复条件。

    该值为true,agent的移动将沿着其当前路径停止。 如果在agent寻路时将该属性设置为false,它将会因为惯性继续沿着它当前的寻路路径移动一小段距离。

    navMeshOwner(Object)

    Returns the owning object of the NavMesh the agent is currently placed on (Read Only).

    If no owner is set for a NavMesh or link instance the return value is null.

    返回agent当前所处导航网格的拥有者。如果该导航网格没有拥有者,或者没有链接实例,那么它会返回null。

    nextOffMeshLinkData(AI.OffMeshLinkData)

    The next OffMeshLinkData on the current path.

    In the case that the current path does not contain an OffMeshLink the OffMeshLinkData is marked as invalid.

    当前路径的下一个OffMeshLinkData。在某种情况下,当前路径并不包含一个分离网格链接,那么下一个分离网格链接就会被标记为无效。

    nextPosition(Vector3)

    Gets or sets the simulation position of the navmesh agent.

    The position vector is in world space coordinates and units.

    The nextPosition is coupled to Transform.position. In the default case the navmesh agent’s Transform position will match the internal simulation position at the time the script Update function is called. This coupling can be turned on and off by setting updatePosition.

    When updatePosition is true, the Transform.position reflects the simulated position, when false the position of the transform and the navmesh agent is not synchronized, and you’ll see a difference between the two in general. When updatePosition is turned back on, the Transform.position will be immediately move to match nextPosition.

    By setting nextPosition you can directly control where the internal agent position should be. The agent will be moved towards the position, but is constrained by the navmesh connectivity and boundaries. As such it will be useful only if the positions are continuously updated and assessed.

    获取或设置导航网格代理的模拟位置。

    位置向量采用的是空间坐标和单位。

    nextPosition被耦合到了变换位置上。在默认情况下导航网格代理的变换位置会在脚本中的Update方法被调用时匹配到局部的模拟位置。这种耦合可以通过设置updatePosition来打开或关闭。

    当updatePosition为true时,变换位置映射出模拟的位置。反之变换位置和导航网格代理就是不同步的,如果你这么设置就可以看到两者在运动的过程中分离开来。当updatePosition被重新打开时,变换位置将会立即被移去匹配nextPosition。

    通过设置nextPosition,你可以直接控制局部的agent位置应该处于的地方。agent将会被移去指定的位置,但是会受到导航网格连接性和边界的限制。因此它只有在位置是不停地更新或评估时才有用。

    obstacleAvoidanceType(AI.ObstacleAvoidanceType)

    The level of quality of avoidance.

    This property lets you trade off the precision of obstacle avoidance againt the processor load required to achieve it. The exact quality/performance values will depend heavily on the complexity of the Scene but as a general rule, faster performance can be achieved at the cost of quality and vice versa.

    path(AI.NavMeshPath)

    Property to get and set the current path.

    This property can be useful for GUI, debugging and other purposes to get the points of the path calculated by the navigation system. Additionally, a path created from user code can be set for the agent to follow in the usual way. An example of this might be a patrol route designed for coverage rather than optimal distance between two points.

    pathPending(bool)

    Is a path in the process of being computed but not yet ready? (Read Only)

    该值为true表明路径正在计算中但还没有准备好。

    pathStatus(AI.NavMeshPathStatus)

    The status of the current path (complete, partial or invalid).

    当前路径的状态,比如是否完整、局部、无效的。

    steeringTarget(Vector3)

    Get the current steering target along the path. (Read Only)

    This is typically the next corner along the path or the end point of the path.

    Unless the agent is moving on an OffMeshLink, there is a straight path between the agent and the steeringTarget.

    When approaching an OffMeshLink for traversal - the value is the position where the agent will enter the link. While agent is traversing an OffMeshLink the value is the position where the agent will leave the link.

    updatePosition(bool)

    Gets or sets whether the transform position is synchronized with the simulated agent position. The default value is true.

    When true: changing the transform position will affect the simulated position and vice-versa.

    When false: the simulated position will not be applied to the transform position and vice-versa.

    Setting updatePosition to false can be used to enable explicit control of the transform position via script. This allows you to use the agent’s simulated position to drive another component, which in turn sets the transform position (eg. animation with root motion or physics).

    When enabling the updatePosition (from previously being disabled), the transform will be moved to the simulated position. This way the agent stays constrained to the navmesh surface.

    获取或设置游戏对象的变换位置是否与模拟的agent的位置同步,默认值是true。

    如果为true,则改变对象的变换位置将会影响模拟的位置(agent的位置),反之亦然。

    如果为false:模拟位置将不会应用于变换位置,反之亦然。

    将updatePosition设置为false可用于通过脚本对变换位置启用明确的控制。 这样我们就可以使用agent的模拟位置来驱动另一个组件,从而设置变换位置(例如,具有根运动或物理特性的动画)。

    将updatePosition从禁用改为启用时,变换位置将会被移去匹配模拟位置。从而agent就被约束地在导航网格表面。

    updateRotation(bool)

    Should the agent update the transform orientation?

    同updatePosition。

    要注意的是,将updatePosition以及updateRotation设置为false的话,SetDestination就只会使得agent去寻路,而游戏对象会保持不动。由此我们可以知道,是agent的位置或旋转带动游戏对戏的变换位置或旋转。直接设置这两个值并不会使得agent停下,只是不让它的位置和挂载对象的变换位置或旋转同步而已。知道这个后,我们就可以在每一帧通过如下语句来使得物体到达目标点后立即停下。它的工作原理便是让agent的位置或旋转,在每一帧都强制等于游戏对象的位置或旋转上。

    m_NavMeshAgent.updatePosition = false;
    m_NavMeshAgent.updateRotation = false;
    m_NavMeshAgent.nextPosition = transform.position;
    

    另请参见nextPosition。

    updateUpAxis(bool)

    Allows you to specify whether the agent should be aligned to the up-axis of the NavMesh or link that it is placed on.

    When this value is set to true, the agent will always be aligned to the local up-axis of the NavMesh or link that it is currently on. When set to false, the agent’s orientation is unaffected by the orientation of the NavMesh.

    velocity(Vector3)

    Access the current velocity of the NavMeshAgent component, or set a velocity to control the agent manually.

    Reading the variable will return the current velocity of the agent based on the crowd simulation.

    Setting the variable will override the simulation (including: moving towards destination, collision avoidance, and acceleration control) and command the NavMesh Agent to move using the specific velocity directly. When the agent is controlled using a velocity, its movement is still constrained on the NavMesh.

    Setting the velocity directly, can be used for implementing player characters, which are moving on NavMesh and affecting the rest of the simulated crowd. In addition, setting priority to high (a small value is higher priority), will make other simulated agents to avoid the player controlled agent even more eagerly.

    It is recommended to set the velocity each frame when controlling the agent manually, and if releasing the control to the simulation, set the velocity to zero. If agent’s velocity is set to some value and then stopped updating it, the simulation will pick up from there and the agent will slowly decelerate (assuming no destination is set).

    Note that reading the velocity will always return value from the simulation. If you set the value, the effect will show up in the next update. Since the returned velocity comes from the simulation (including avoidance and collision handling), it can be different than the one you set.

    The velocity is specified in distance units per second (same as physics), and represented in global coordinate system.

    API(Public Methods)

    ActivateCurrentOffMeshLink(void)

    public void ActivateCurrentOffMeshLink(bool activated);

    ParametersDescription
    activedIs the link activated?

    Enables or disables the current off-mesh link.

    This function activates or deactivates the off-mesh link where the agent is currently waiting. This is useful for granting access to newly discovered areas of the game world or simulating the creation or removal of an obstacle to an area.

    启用或禁用当前的分离网格链接。
    该方法激活或停用agent当前正在等待的分离网格链接。这有助于授权agent对象访问游戏世界的新发现的区域,或者模拟出对某个区域的障碍物的创造或移除。

    总的来说,我也不知道这个方法有什么用。

    CalculatePath(bool)

    public bool CalculatePath(Vector3 targetPosition, AI.NavMeshPath path);

    ParametersDescription
    targetPositionThe final position of the path requested.
    pathThe resulting path.
    Returnbool True if a path is found.

    Calculate a path to a specified point and store the resulting path.

    This function can be used to plan a path ahead of time to avoid a delay in gameplay when the path is needed. Another use is to check if a target position is reachable before moving the agent.

    CompleteOffMeshLink(void)

    public void CompleteOffMeshLink();

    Completes the movement on the current OffMeshLink.

    The agent will move to the closest valid navmesh position on the other end of the current OffMeshLink.

    CompleteOffMeshLink has no effect unless the agent is on an OffMeshLink (See Also: isOnOffMeshLink).

    When autoTraverseOffMeshLink is disabled an agent will pause at an off-mesh link until this function is called. It is useful for implementing custom movement across OffMeshLinks.

    FindClosestEdge(bool)

    public bool FindClosestEdge(out AI.NavMeshHit hit);

    ParametersDescription
    hitHolds the properties of the resulting location.
    Returnbool True if a nearest edge is found.

    Locate the closest NavMesh edge.

    The returned NavMeshHit object contains the position and details of the nearest point on the nearest edge of the Navmesh. Since an edge typically corresponds to a wall or other large object, this could be used to make a character take cover as close to the wall as possible.

    GetAreaCost(float)

    public float GetAreaCost(int areaIndex);

    areaIndex Area Index.
    Returns
    float Current cost for specified area index.

    ParametersDescription
    areaIndexArea Index.
    Returnfloat Current cost for specified area index.

    Gets the cost for path calculation when crossing area of a particular type.

    The cost of a path is the amount of “difficulty” involved in calculating it - the shortest path may not be the best if it passes over difficult ground, such as mud, snow, etc. Different types of areas are denoted by navmesh areas in Unity. The cost of a particular area is given in cost units per distance unit. Note that the cost of a path applies to the pathfinding only and does not automatically affect the movement speed of the agent when following the path. Indeed, the path’s cost may denote other factors such as danger (safe but long path through a minefield) or visibility (long path that keeps a character in the shadows).

    Move(Vector3)

    public void Move(Vector3 offset);

    ParametersDescription
    offsetThe relative movement vector.

    Apply relative movement to current position.

    If the agent has a path it will be adjusted.
    不常用的方法。直接给agent提供一个运动的方向,它会朝着这个方向一直运动。前提是它在导航网格上。如果agent正在寻路,那么该方法会被打断。

    Raycast(bool)

    public bool Raycast(Vector3 targetPosition, out AI.NavMeshHit hit);

    ParametersDescription
    targetPositionThe desired end position of movement.
    hitProperties of the obstacle detected by the ray (if any).
    Returnbool True if there is an obstacle between the agent and the target position, otherwise false.

    Trace a straight path towards a target postion in the NavMesh without moving the agent.

    This function follows the path of a “ray” between the agent’s position and the specified target position. If an obstruction is encountered along the line then a true value is returned and the position and other details of the obstructing object are stored in the hit parameter. This can be used to check if there is a clear shot or line of sight between a character and a target object. This function is preferable to the similar Physics.Raycast because the line tracing is performed in a simpler way using the navmesh and has a lower processing overhead.

    ResetPath(void)

    public void ResetPath();

    Clears the current path.

    When the path is cleared, the agent will not start looking for a new path until SetDestination is called.

    Note that if the agent is on an OffMeshLink when this function is called, it will complete the link immediately.
    清除当前路径。

    路径被清除后,agent不会再次寻找新的路径,直到SetDestination方法被调用。有一点需要注意,当agent正在一个分离网格链接上时(比如正在从一个建筑物跳到另一个建筑物的过程中)调用该方法,它会立即完成这一链接动作(表现出来就是立刻闪烁到另一个建筑物上)。

    还需要注意的是,清除路径并不意味着使agent停下,只是不再寻找新的路径而已。

    SamplePathPosition(bool)

    public bool SamplePathPosition(int areaMask, float maxDistance, out AI.NavMeshHit hit);

    ParametersDescription
    areaMaskA bitfield mask specifying which NavMesh areas can be passed when tracing the path.
    maxDistanceTerminate scanning the path at this distance.
    hitHolds the properties of the resulting location.
    Returnbool True if terminated before reaching the position at maxDistance, false otherwise.

    Sample a position along the current path.

    This function looks ahead a specified distance along the current path. Details of the mesh at that position are then returned in a NavMeshHit object. This could be used, for example, to check the type of surface that lies ahead before the character gets there - a character could raise his gun above his head if he is about to wade through water, say.

    沿着当前路径取样一个坐标。

    该方法会沿着当前路径检查指定的距离,如果取样到某一层上的点,会在NavMeshHit对象中返回该点网格的详细信息。 举个例子,这可以用于检查在角色到达目标点之前,前方是否存在某一物体。例如,如果角色打算涉水而过,它可以将枪举过头顶。那么这个方法就可以检测前方是否有水。

    SetAreaCost(void)

    public void SetAreaCost(int areaIndex, float areaCost);

    ParametersDescription
    areaIndexArea cost.
    areaCostNew cost for the specified area index.

    Sets the cost for traversing over areas of the area type.

    If you enable or disable the agent then the cost will be reset to the default layer cost.

    设置穿过某一特定类型区域的代价。

    如果你启用或禁用了agent,这个代价将会被重置为默认的层级代价。

    SetDestination(bool)

    public bool SetDestination(Vector3 target);

    ParametersDescription
    targetThe target point to navigate to.
    Returnbool True if the destination was requested successfully, otherwise false.

    Sets or updates the destination thus triggering the calculation for a new path.

    Note that the path may not become available until after a few frames later. While the path is being computed, pathPending will be true. If a valid path becomes available then the agent will resume movement.

    设置或更新目的地从而触发新路径的计算。

    这是最常用的方法,设置一个目的地然后让agent自动寻路。要注意的是,新计算出的路径在过几帧之后才有用。在路径被计算时,pathPending的值是true。在一个有效的路径变得可用后,agent会恢复移动。

    这一点是需要注意的。新计算出的路径并不会使得agent直接去寻路,而是要经过几帧才会执行。因此最好是在找到路径过一会儿后再让agent去寻路。

    SetPath(bool)

    public bool SetPath(AI.NavMeshPath path);

    ParametersDescription
    pathNew path to follow.
    Returnbool True if the path is succesfully assigned.

    Assign a new path to this agent.

    If the path is succesfully assigned the agent will resume movement toward the new target. If the path cannot be assigned the path will be cleared (see ResetPath).

    为agent分配一个新的路径。

    该方法强制使agent走分配的路径。如果路径被成功分配之后,agent会恢复前往新目标的移动。如果路径不能被分配,那么它会被清除掉。

    Warp(bool)

    public bool Warp(Vector3 newPosition);

    ParametersDescription
    newPositionNew position to warp the agent to.
    Returnbool True if agent is successfully warped, otherwise false.

    Warps agent to the provided position.

    Returns true if successful, otherwise returns false.

    将agent直接放到提供的坐标处,可用于agent的瞬移。


    1w7k字,好累啊嘤嘤嘤,帅气gg漂亮mm麻烦点个赞么么哒~~~

    展开全文
  • 测试场景:新建空Navmesh作为路径的容器 二、设置导航路径 在可以通过的物体上勾选Navigation Static,代表参与到导航的烘焙。 三、设置某些不可走的地方 四、添加小人,挂上NavMeshAgent组件 五、利用...
  • 相信不少朋友使用过Unity3Dd的NavMesh系统为自己的游戏添加导航寻路功能。 但是老版本的NavMesh功能虽然简单易用,但是个人在实际使用的时候经常会感觉到臃肿和不方便。 这里对老版的NavMesh的使用方法就不再赘述...
  • Unity 编辑Prefab的NavMesh

    2021-06-10 13:17:43
    编辑Prefab生成NavMesh文件
  • Unity中实现动态NavMesh导航

    千次阅读 多人点赞 2020-11-27 14:38:39
    实现动态NavMesh导航有两种方法,一种是使用Unity自带的NavMeshObstacle组件,另一种是官方出的一种更高级的动态寻路方案,高级的动态寻路方案在性能上消耗太大,一般情况下不推荐使用 二:效果演示 三:方法1—...
  • Unity中使用NavMesh导航 (Navigation Using NavMesh in Unity) In this tutorial we will learn about Navmesh in Unity, how to create it and use it on your game as part of navigation. 在本教程中,我们将...
  • Unity中进行主题公园的Navmesh实验 在IMAC学校编程课程中,在Unity中创建类似于模拟的动物园大亨。 我们必须反向工程并加以改进。 入门 该项目使用子模块,因此必须使用 git clone --recurse-submodules -j8 ...
  • 使用unity5.6新功能实现 实时动态烘培NavMesh
  • 参考资料1 通常 使用以前 的烘培,需要 把物体 变成 静态 物体,现在 UNITY 升级后 使用 相关的组件 可以动态自动烘培  参考资料: ...What's New in Unity 5.6 - Update to Nav Mesh (1/2) 3.
  • [专栏精选]Unity中动态构建NavMesh

    千次阅读 2018-10-13 16:45:33
    本文节选自洪流学堂公众号专栏《郑洪智的Unity2018课》,未经允许不可转载。 洪流学堂公众号回复专栏,查看更多专栏文章。 小新:“Unity内置的Navigation系统是不错,挺好用,但是我发现个致命问题” 大智:...
  • UnityNavMeshAgent与Animator及RootMotion的配合 Unity目前(2019.4)还没有内置开箱即用的将导航与动画整合的方案,这里提供了一个将NavMeshAgent和Animator整合的思路,并且兼容了RootMotion。 实现NavMesh...
  • unity自带寻路Navmesh入门教程(三)

    千次阅读 2018-08-01 09:28:24
    继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果: 第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路线进攻。 ...
  • Unity 动态 NavMesh 导航AI

    千次阅读 2018-09-06 23:19:42
    如果对基础NavMesh不了解的同学,这一篇文章基础讲的很详细,虽然有点早,不过放到现在也...实现动态NavMesh有两种方法,一种使用unity自带的 NavMeshObstacle,正是下面我要讲的,还有一种是Unity5.6之后官方出的一...
  • Navmesh2Rvo

    2018-03-08 13:12:36
    基于rvo2的rvo模块,替换了原本的float类型,全部采用封装类的定点数,并使用kframework,比如command达到友元函数的效果,属性注册
  • Unity运行时生成Navmesh

    2020-09-18 19:58:08
    官方教程:Runtime NavMesh Generation Git地址:NavMeshComponents 其它参考:Runtime Generation of Unity NavMesh on the XY plane with 2D Physics
  • 今天抽空整理了一下NavMesh寻路,对比了A算法机制(下一篇作为专题写),创建了实例Demo,希望尽快集成到项目中分发回调。由于版本支持和2/3D的差异化,先就原始用法作简单描述,再深入5.6版本展开分析。由于时间紧迫...
  • 一、使用NavMeshModifier和NavMeshModifierVolume可以控制不同的代理,在相同区域是否可以移动
  • Unity NavMeshAgent常用API

    千次阅读 2019-06-27 17:49:04
    NavMesh有几个API很有用 NavMesh.SamplePosition 根据给的点进行采样,可传入最大距离,返回true说明采样到了点,否则采样失败(可以用来获得地形高度,但是最大距离不要太大,注意效率) NavMesh.Raycast 向目标点...
  • Unity3D架构设计NavMesh寻路

    千次阅读 2018-07-17 09:06:35
    (为了让各位能更容易读懂此文,此文仍会继续补充。 现在我将所有源码都存放在了Github上,请各位跟随我到Github去取源码:...以Unity3D引擎为例写一个底层c# NavMesh寻路。因为Unity3D...
  • UnityNavmesh

    2020-01-11 12:57:14
    转载:https://www.jianshu.com/p/30f749eece88

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,395
精华内容 958
关键字:

navmeshunity