U3D navmesh寻路简单示范
要求:放置一个BOSS,创建几个路标,自动循环这几个路标形成回路,变成自动巡逻,并配合animator系统的控制开关控制BOSS的动作
1.先设置好BOSS 中animator的控制开关,只看Run和Idle之间的联系,设置一个BOOL变量“isMove”进行控制(其他动作联系是我设置的其他攻击控制和使用技能控制,不必注意)
逻辑很简单,isMove为真,Idle向Run,isMove为假,Run向Idle, 把Idle设置为默认状态
l
2.在层次面板下创建一个空物体,改名为wayPoints,然后在其下创建5个子的空物体,分别为wayPoints01,02,03,04,05 表示BOSS将要巡逻的五个点
3.在Windows目录下点击navigation,打开这个系统,设置好相关属性之后,点击bake,如图,已经烘培好了可寻路的范围(蓝色部分)
4.在BOSS下添加一个NavMeshAgent的组件,并创建一个脚本,进行使用
using UnityEngine; using System.Collections; public class nuoshouMove : MonoBehaviour { public Transform[] wayPoints; private int index=0;//设置一个标志位。他默认自动巡逻的标识 //到一个点后休息8S时间 public float stopTime=8f; public float timer=0; //引用自己和navmeshagent组件,动作组件 private NavMeshAgent nav;
private Animator ani; void Awake(){ ani = this.GetComponent<Animator> (); } // Use this for initialization void Start () { nav = this.GetComponent<NavMeshAgent> (); view = this.GetComponent<nuoshouView> (); nav.destination =wayPoints [index].position;//一开始就走向第一个点 } // Update is called once per frame void Update () { moving(); //走向设置好的五个点 if (nav.remainingDistance < 0.2f) { //到点后休息一段时间 ani.SetBool("isMove",false); timer+=Time.deltaTime;//开始计时 if(timer>=stopTime){ index++; index%=5;//利用求余运算,进行循环 ani.SetBool("isMove",true); nav.destination=wayPoints[index].position; timer=0;//计时器归零 } } } void moving(){ //ismove设为真,播放走这个动作 ani.SetBool ("isMove", true); nav.destination = wayPoints [index].position;//走向目标位置 } }