需求:使用NavMesh自动寻路,先走到小球1的位置,停留3秒钟,折返走到小球2的位置,再停留3秒钟,在折返回小球1的位置,如此来回反复的停留,折返,相当于游戏中的敌人的巡逻功能
OK,那么我们来实现这个功能:
1.先将路面烘焙好 生成导航网格 再设置好立方体Nav Mesh Agent组件的各个参数
2.给Cube添加脚本CubeMove 下面我们直接开始写代码
3.既然我们要不停的在两个小球的位置上来回停留 ,就要创建一个存储两个小球位置的数组,并在外赋值,在面板拖入赋值的时候注意顺序 要和数组的下标对应 先拖入第一个小球再拖入第二个小球
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class cubemove : MonoBehaviour
{
NavMeshAgent agent;
//计时器
private float timer;
//停留时间间隔
public float timerInterval = 3;
//记录两个小球位置的数组
public Transform[] targets;
//数组的下标
int index = 0;
void Start()
{
//得到组件对象
agent = GetComponent<NavMeshAgent>();
//刚开始物体要先朝第一个目标位置走过去
agent.SetDestination(targets[index].position);
}
void Update()
{
//agent.remainingDistance 代表的是距离目标的位置
//如果立方体走到了目标位置 这个距离就为0 说明是抵达了目标位置
if (agent.remainingDistance == 0)
{
//抵达位置,开始计时
timer += Time.deltaTime;
if (timer>=timerInterval) //timerInterval=3
{
timer = 0;
index++;//index初始值为0
index %= targets.Length;//Length为2 1%2 =1 还是会朝着第二个目标去
//因为数组的长度为2 无论怎么取余 只有两种结果 0 和 1 所以就实现了在两个物体之间巡逻
agent.SetDestination(targets[index].position);
}
}
}
}
代码内容很简单 至此 功能实现