Unity_NavMesh自动寻路_实现两个物体之间巡逻

需求:使用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);
            }
        }
        
    }
}

 代码内容很简单 至此 功能实现

猜你喜欢

转载自blog.csdn.net/m0_69778537/article/details/129913558