U3D navmesh寻路简单示范

要求:放置一个BOSS,创建几个路标,自动循环这几个路标形成回路,变成自动巡逻,并配合animator系统的控制开关控制BOSS的动作

1.先设置好BOSS 中animator的控制开关,只看Run和Idle之间的联系,设置一个BOOL变量“isMove”进行控制(其他动作联系是我设置的其他攻击控制和使用技能控制,不必注意)

逻辑很简单,isMove为真,Idle向Run,isMove为假,Run向Idle, 把Idle设置为默认状态

lU3D navmesh寻路简单示范_第1张图片

 

2.在层次面板下创建一个空物体,改名为wayPoints,然后在其下创建5个子的空物体,分别为wayPoints01,02,03,04,05 表示BOSS将要巡逻的五个点

3.在Windows目录下点击navigation,打开这个系统,设置好相关属性之后,点击bake,如图,已经烘培好了可寻路的范围(蓝色部分)

U3D navmesh寻路简单示范_第2张图片

4.在BOSS下添加一个NavMeshAgent的组件,并创建一个脚本,进行使用

U3D navmesh寻路简单示范_第3张图片

U3D navmesh寻路简单示范_第4张图片

 


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;//走向目标位置 } }

 

 

你可能感兴趣的:(U3D navmesh寻路简单示范)