【问题标题】:Run in opposite direction?反方向跑?
【发布时间】:2018-05-25 20:03:48
【问题描述】:

我有这段代码可以计算出我的白球和绿球之间的最短距离。

当我的绿色球使用它时,它们会追逐白色并将它们变成绿色。

有没有办法与我的绿球相反,让我的白球跑掉?绿球代码如下:

private Vector3 FindClosestHuman()
{
    GameObject[] Humans = GameObject.FindGameObjectsWithTag("Human");

    Transform bestTarget = null;
    float closestDistanceSqr = Mathf.Infinity;
    Vector3 currentPosition = this.transform.position;
    foreach (GameObject human in Humans)
    {
        Vector3 directionToTarget = human.transform.position - currentPosition;

        float dSqrToTarget = directionToTarget.sqrMagnitude;
        if (dSqrToTarget < closestDistanceSqr)
        {
            closestDistanceSqr = dSqrToTarget;
            bestTarget = human.transform;
        }
    }

    return bestTarget.position;
}

void Update ()
{
        infectionAgent.SetDestination(FindClosestHuman());
}

我尝试在 Update 方法中使用 transform.translate 和 Vector3,但我似乎无法让它工作......

【问题讨论】:

  • 如果你这样做并且你不能做相反的事情意味着这段代码中有很多复制和粘贴:D
  • @IgnacioSolerGarcia 你是对的哈哈。问题是我现在需要做的似乎不适合该代码,我不知道 SetDestination 的反面是什么。
  • 你能说得更具体点吗?你想让球从最近的球员身上跑掉还是别的什么?

标签: c# unity3d


【解决方案1】:

Unity 的NavMeshAgentSetDestination 没有对立面。

也就是说:当你远离某物时,你如何决定在岔路口走哪个方向?随机?距离最远的那个?如果你能绕圈跑,那比跑进死胡同要好,即使你离你的远离目标更近?是否允许朝着远离目标的方向跑,以到达一个可以让您到达更远目的地的分支?

您需要弄清楚“逃跑”是什么意思,并为这种导航编写自己的算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2020-03-14
    • 2017-09-18
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多