美文网首页Unity基础入门分享
【Unity3D 学习笔记】自动寻路

【Unity3D 学习笔记】自动寻路

作者: FrankNotes | 来源:发表于2020-04-26 23:38 被阅读0次

    连续的路面

    1. 平面等非移动物体设置为Navigation Static,在Inspector视图或Navigation视图中。
    1. 为要寻路的物体添加Nav Mesh Agent组件 ,设置半径、高度、速度、加速度、距离目标的停止距离。

    2. Navation/Bake 下设置Agent的参数

    参数 作用
    半径 半径越小,网格越大
    高度 高度决定能否穿过“洞”
    斜坡斜度 决定能通过的斜坡的斜度
    台阶高度 不能大于人的高度
    Drop Height 允许下落最大高度
    Jump Distance 允许最大跳跃距离
    1. 给移动的物体添加脚本,获取 NavMeshAgent 组件,然后通过 以下函数设置导航的目标位置

       NavMeshAgent nagent;
       public Transform targetpos;
      
       nagent = gameObject.GetComponent<NavMeshAgent>();
       nagent.destination = targetpos.position;
      

     

    离散的路面

    使用Off Mesh Link组件,首先完成上面的操作。注意在Nav Mesh Agent中勾选上Auto Traverse off Link。

    自动创建OffMeshLink

    1. 选中路面,在Navination视图中点击object下的Generate OffMeshLink。所有路面都要添加,不然只能从一端到一端。

    2. 在Bake下调节jump distance。

    出现连线则成功

    手动创建OffMeshLink

    在一个物体上添加Off Mesh Link组件,选择start和end。


    出现物体之间的双向连线

     

    网格分层

    设置不同的地形可否通过情况

    1. 在Navigation视图中的areas下,输入要设置的地面的名称。
    1. 选中要设置的地面,然后在Navigation视图中,Object下的Navigation Area选择对应的area
    1. Bake
    1. 选中要移动的物体,在层次面板中,Nav Mesh Agent下的Area Mask选择可以通过的地面
    1. 通过脚本控制

      Navigation Areas下的标签,按照二进制1或0决定能不能走,二进制位从右到左依次是第一个标签到最后一个标签。

       NavMeshAgent agent;
       myagent = gameObject.GetComponent<NavMeshAgent>();
      
       agent.enabled = true;//组件启用
       agent.areaMask = -1 ^ 1 <<6;//启用Navination Areas下的第六个标签
       agent.areaMask |= 0x8;//启用第四个标签
       agent.areaMask &= ~0x18;//禁用第四个第五个标签
      

    相关文章

      网友评论

        本文标题:【Unity3D 学习笔记】自动寻路

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