我是想树敌 巡逻系统,其中每时每刻的守卫 达到 他 停止 10秒,然后 继续 他的动作。我试着把动画从 用isStopped混合树 产自 NavMeshAgent.
EDIT: 我现在的脚本是让特工移动到一个点,然后他停了一段时间,然后只播放步行动画,但他停留在一个地方,我改了几行代码,现在特工在第一次停止后移动,但第二次他停在第二个点,步行动画仍然有效,时间没有减少。
public Transform[] points;
private int destPoint = 0;
public NavMeshAgent agent;
public Animator animator;
public int time;
void Start()
{
agent = GetComponent<NavMeshAgent>();
animator = transform.Find("Enemy").GetComponent<Animator>();
// 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;
}
void GotoNextPoint()
{
// Returns if no points have been set up
if (points.Length == 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.Length;
//agent.speed = 1f;
//animator.SetFloat("Blend", agent.speed);
}
void Update()
{
if (agent.remainingDistance == 0f && time == 100000)
{
agent.speed = 1f;
Debug.Log(agent.remainingDistance);
animator.SetFloat("Blend", 1);
GotoNextPoint();
}
else if (agent.remainingDistance <= 0.5f && agent.remainingDistance != 0f && time == 100000)
{
animator.SetFloat("Blend",0);
agent.enabled = false;
GotoNextPoint();
}
else if(animator.GetFloat("Blend") == 0)
{
time--;
}
if (time == 99000 && animator.GetFloat("Blend") == 0)
{
time = 10000;
agent.enabled = true;
agent.isStopped = false;
animator.SetFloat("Blend", 1);
agent.autoRepath = true;
GotoNextPoint();
}
}
我修改了几行代码,现在特工在第一次停止后移动,但第二次他在第二个点停止,行走动画仍然有效,时间没有减少。
if (time == 99000 && animator.GetFloat("Blend") == 0)
{
time = 10000;
agent.enabled = true;
agent.isStopped = false;
animator.SetFloat("Blend", 1);
//New lines of code
agent.ResetPath();
destPoint = (destPoint + 1) % points.Length;
agent.SetDestination(points[destPoint].position);
}[enter image description here][1]
首先,我会使用 "SetDestination" 函数,以便设置下一个目的地。
最后你写道。
if (time == 99000 && animator.GetFloat("Blend") == 0)
{
time = 10000; *-> needs to be 100000, not 10000*
agent.enabled = true;
agent.isStopped = false;
animator.SetFloat("Blend", 1);
agent.autoRepath = true;
GotoNextPoint();
}
你可以使用 "NavMeshAgent.ResetPath" 来重置路径,而不是使用 "autoRepath".
后。"ResetPath",使用 "SetDestination" 内的函数GotoNextPoint()。
还有一件很重要的事情--检查是否有多个点,如果只有一个点,你的守卫就会走在同一个点上。
更多信息,建议查看 Unity NavMeshAgent