using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class AgentControl : MonoBehaviour
{
public List<Transform> points;
private int destPoint = 0;
private NavMeshAgent agent;
private Transform originalPos;
void Start()
{
agent = GetComponent<NavMeshAgent>();
// Disabling auto-braking allows for continuous movement
// between points (ie, the agent doesn't slow down as it
// approaches a destination point).
agent.autoBraking = false;
originalPos = transform;
points.Add(originalPos);
GotoNextPoint();
}
void GotoNextPoint()
{
// Returns if no points have been set up
if (points.Count == 0)
return;
// Set the agent to go to the currently selected destination.
agent.destination = points[destPoint].position;
// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Count;
}
void Update()
{
// Choose the next destination point when the agent gets
// close to the current one.
if (!agent.pathPending && agent.remainingDistance < 1f)
GotoNextPoint();
}
}
脚本是附在每个代理上的。
我有2个代理,第一个代理有一个航点,第二个代理有8个航点。第一个代理有一个航点,第二个代理有8个航点,两个代理在航点之间循环移动,我希望其中一个航点也是他们的起始位置,所以每个代理也会移动到他的第一个原始起始位置作为点的一部分。
我试着在起始点中添加这个功能
originalPos = transform;
points.Add(originalPos);
但这并没有改变什么。第一个代理移动到他的一个航点并停留在那里,第二个代理在航点之间进行循环,但没有起始位置。
很多原因可以避免你的代理去其初始位置。
1) if (!agent.pathPending && agent.remainingDistance < 1f)
这行代码表示,如果靠近目的地,就会转到下一个点。所以,如果你的初始位置在前一个航点附近,初始位置将被分流......
2) 如果你的初始位置不在航点上,它将一直被分流。
所以在使用navmesh代理时,不要忘了每个航点之间要有相对的间隔。