最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • unity中Navigation实现自动寻路功能

    正文概述 掘金(心之凌儿)   2021-04-26   749

    前言

    Navigation可以使物体智能的移动到某个位置,这样可以在游戏完成一些NPC的智能路径和主角的寻路功能

    1,对于场景进行渲染

    将场景需要烘培的物体设为静态:

    首先选中需要烘培的物体,然后在inspector面板中右上角将物体设为静态物体,这样可以对物体进行烘培
    unity中Navigation实现自动寻路功能
    打开NaNavigation(导航)烘培面板:

    在windows中找到AI点击后出现Navigation面板,

    unity中Navigation实现自动寻路功能
    在navigation中对于烘培进行设置:

    对于Bake的相关参数进行,修改可以实现渲染的效果,比如攀爬楼梯、跳过沟壑、从高处跳下等功能的实现,调整下面的参数,可以在上面的示意图上实时展示出来

    unity中Navigation实现自动寻路功能
    - 参数的相关含义:

    • Agent Radius:定义网格和地形边缘的距离
    • Agent Height:定义可以通行的最高度
    • Max Slope:定义可以爬上楼梯的最大坡度
    • Step Height:定义可以登上台阶的最大高度(最大高度要小于可通行的最大高度
    • Drop Height:允许最大下落距离
    • Jump Distance:允许最大的跳跃距离

    - 渲染后的效果为:

    淡蓝色区域即为角色可以移动的区域
    unity中Navigation实现自动寻路功能
    对于Navigation中其他三个选项的设置

    • Object选项
      选中场景中一个物体后,Object中会出现如图选项,基本的设置选项如图,可以通过调整对对象的烘培,使得角色是否可以在该区域移动或者跳跃

    unity中Navigation实现自动寻路功能

    • Areas面板

    Areas主要是用来设置不同区域的权值,这样可以确保角色优先在哪个区域移动(默认Jump权值高,这样在Object将物体设置为Jump时,没路时,物体会选择跳跃,而不是绕一大圈)
    unity中Navigation实现自动寻路功能

    • Agents面板
      这个面板主要是角色添加Nav Mesh Agent组件时使用的
      unity中Navigation实现自动寻路功能

    2、可以移动的动态障碍

    直接给物体添加Nav Mesh Obstacle组件,通过设置参数,则可以形成动态移动的障碍物:
    unity中Navigation实现自动寻路功能

    3、NPC移动设置

    给NPC添加Nav Mesh Agent组件
    添加组件后,对相关参数进行设置:
    unity中Navigation实现自动寻路功能

    • Steering(操纵)
    • Speed:最大移动速度
    • Angular Speed: 行进时的最大角速度
    • Acceleration:最大加速度,控制速度的变化快慢
    • Stopping Distance:制动距离,到达目标点的距离小于这个值
    • Auto Braking:勾选,到达目标点后停止运动,没有缓冲运动

    常用API:

    • ActivateCurrentOffMeshLink :激活或禁止当前off-MeshLink.
    • CalculatePath :计算到某个点的路径并储存
    • CompleteOffMeshLink :完成当前offMeshLink的移动
    • Move :移动到相对于当前位置的点
    • ResetPath :清除当前路径
    • SetDestination :设置目标点
    • SetPath :设置一条路线
    • Warp :瞬移到某点
    • remainingDistance:到目标点的距离
    • desiredVelocity:期望速度,方向指向的是到达目标点的最短路径的方向

    编写代码控制物体移动

    实现让角色通过系列的物体:

     	public GameObject[] pos; //定义系列点的数组
     	private NavMeshAgent nav; //定义一个NPC导航组件(一定要添加在头文件UnityEngine.AI类
     	private int nub = 0;   //定义一个整数
    

    获取物体NavMeshAgent组件:

    void Start()
        {
            nav = GetComponent<NavMeshAgent>();
        }
    

    进行碰撞检测,如果物体达到相应物体,则数组移动到下一个:

        private void OnTriggerEnter(Collider other)
        {
            if(other.gameObject.tag=="object")    nub++;
        }
    

    最后则是要控制物体导航到指定点,调用API接口destination:

        void Update()
        {
            if (Vector3.Distance(transform.position, pos[nub].transform.position) >= 0.1f)
            {
                nav.destination = pos[nub].transform.position;
            }
    
        }
    

    总结

    使用NavNavigation是一个比较复杂的流程,但是掌握方法,就会很简单,多学习多使用


    下载网 » unity中Navigation实现自动寻路功能

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元