«SetDestination» можно вызывать только на активном агенте, который был помещен в NavMesh - после уничтожения врага - PullRequest
0 голосов
/ 03 июля 2018

У меня есть NevMeshSurface с врагами. У всех врагов есть НевМешАгент.

Когда игрок умирает, все враги должны быть уничтожены:

GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
foreach (GameObject enemy in enemies)
{
    Destroy(enemy.gameObject);
}

Когда это происходит, я получаю ошибку:

«SetDestination» может вызываться только на активном агенте, который был размещены на НавМеш.

Это сценарий врага:

public GameObject player;
NavMeshAgent agent;

void Start()
{
    agent = GetComponent<NavMeshAgent>();
    agent.Warp(transform.position);
}

void Update()
{
    if (player.gameObject != null && gameObject.activeSelf)
    {
        agent.SetDestination(player.transform.position);
    }   
}

NevMeshSurface запекается, когда появляются враги.

И это прекрасно работает, пока игрок не умрет, тогда появляется ошибка, и я не знаю, как это решить.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Я нашел решение сегодня:

Я изменил позицию игрока через 0,5 секунды после того, как уничтожил врагов, и теперь он работает отлично!

0 голосов
/ 03 июля 2018

Похоже, что агент уничтожен, но Update () все еще вызывается. Глядя на остальную часть вашего кода, это не кажется слишком вероятным (если в коде, который вы не опубликовали, есть что-то странное). Я бы изменил метод Update, чтобы отладить то, что на самом деле не так:

void Update()
{
    if (player.gameObject != null && gameObject.activeSelf)
    {
        print("Is agent null: " + (agent == null));
        agent.SetDestination(player.transform.position);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...