unity Navmesh 路径反转
Unity NavMesh path reverse
我需要反转这个用于让游戏对象在某些变换之间巡逻的脚本。我需要对象从点 (1, 2, 3, 4, 5) 开始按顺序导航,当它到达数组的末尾时,它会反转数组本身的顺序,以便它会向后导航 (5, 4, 3, 2 ,1).
using UnityEngine;
using UnityEngine.AI;
public class Patrol : MonoBehaviour
{
public Transform[] points;
private int destPoint = 0;
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.autoBraking = false;
GotoNextPoint();
}
void GotoNextPoint()
{
if (points.Length == 0)
return;
agent.destination = points[destPoint].position;
destPoint = (destPoint + 1) % points.Length;
}
void Update()
{
if (!agent.pathPending && agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}
您应该在达到最终点时使用 Array.Reverse
以便于在您的代码上实现。
文档 here.
将此代码添加到 GoToNextPoint
的末尾。
destPoint++;
if (destPoint >= points.Length)
{
Array.Reverse(points);
destPoint = 0;
}
并删除。
destPoint = (destPoint + 1) % points.Length;
我需要反转这个用于让游戏对象在某些变换之间巡逻的脚本。我需要对象从点 (1, 2, 3, 4, 5) 开始按顺序导航,当它到达数组的末尾时,它会反转数组本身的顺序,以便它会向后导航 (5, 4, 3, 2 ,1).
using UnityEngine;
using UnityEngine.AI;
public class Patrol : MonoBehaviour
{
public Transform[] points;
private int destPoint = 0;
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.autoBraking = false;
GotoNextPoint();
}
void GotoNextPoint()
{
if (points.Length == 0)
return;
agent.destination = points[destPoint].position;
destPoint = (destPoint + 1) % points.Length;
}
void Update()
{
if (!agent.pathPending && agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}
您应该在达到最终点时使用 Array.Reverse
以便于在您的代码上实现。
文档 here.
将此代码添加到 GoToNextPoint
的末尾。
destPoint++;
if (destPoint >= points.Length)
{
Array.Reverse(points);
destPoint = 0;
}
并删除。
destPoint = (destPoint + 1) % points.Length;