如何让每个代理也能回到原来的位置?

问题描述 投票:0回答:1
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);

但这并没有改变什么。第一个代理移动到他的一个航点并停留在那里,第二个代理在航点之间进行循环,但没有起始位置。

c# unity3d
1个回答
0
投票

很多原因可以避免你的代理去其初始位置。

1) if (!agent.pathPending && agent.remainingDistance < 1f) 这行代码表示,如果靠近目的地,就会转到下一个点。所以,如果你的初始位置在前一个航点附近,初始位置将被分流......

2) 如果你的初始位置不在航点上,它将一直被分流。

所以在使用navmesh代理时,不要忘了每个航点之间要有相对的间隔。

© www.soinside.com 2019 - 2024. All rights reserved.