unity 自动寻路

自动寻路的步骤:

首先要确定场景中的那些物体是不动的,设置为navigation static,然后再windows下找navigation窗口烘焙navigation static物体,也就是烘焙路面,因为烘焙过后的蓝色路面才是寻路物体可以走的。

然后就是给自动寻路的物体添加NavMashAgent组件。最后就是给对象添加脚本,先获取到对象的NavMashAgent组件,然后调用SetDestination(目标postion).这样呢基本的自动寻路效果就实现啦。

下面我们来看一下具体的实现:

首先设置静态,然后烘焙静态物体.再Windows工具栏下找navigation窗口(unity版本较新的在Windows--AI--navigation)。这时会出现下面这个窗口:

界面中的参数:

 agent radius:渲染的地面离碰撞的半径

 agent height:能渲染的离地面最高的高度

 max Slop:       渲染斜坡的最大角度

 step height:渲染台阶的最大高度

渲染过后的地面就是这样子啦:(根据设置的areas会显示不同的颜色,默认的地面蓝色)

接下来就是给需要自动寻路的物体添加navimenshagent组件了:

这个组件的参数设置为默认就好,不需要改动。

那么到这里呢准备工作就算做完了,最后就是还挂脚本啦。脚本也很简单,就是获取到刚刚添加的naimenshagent组件,调用组建的setdestination()方法,方法里面的参数是目标物体的transform。

using UnityEngine;
using System.Collections;
using UnityEngine.AI;//寻路需要添加 UnityEngine.AI命名空间
public class CubeNavigation : MonoBehaviour {
    NavMeshAgent nav;
    Vector3 thisPos;//当前自动寻路对象的位置
    // Use this for initialization
    void Start () {
        //获取 NavMeshAgent组件      
        nav = this.GetComponent<NavMeshAgent>();
	}
    public Transform target;
    public float distance;
    // Update is called once per frame
    void Update () {
        thisPos = this.transform.position;
        distance = (thisPos - target.position).magnitude;//计算两向量之间的距离
        float distance1 = Vector3.Distance(thisPos, target.position);//Vector3.Distance封装的上面的magnitude取模的方法
        if (distance1>=2)//如果距离大于3才寻路
        {
            nav.SetDestination(target.position);
        }
        else
        {      
            //停止寻路的三种方法:
            //nav.Stop();//1.调用自身API
            //nav.enabled = false;//2.禁用navmeshagent组件
            nav.SetDestination(transform.position);//3.把目标点设置为自身
        }       
	}
    
}

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值