Unity пытается получить доступ к уничтоженному объекту - PullRequest
1 голос
/ 05 мая 2020

Я создаю экземпляр сборного объекта (пули), и если он будет уничтожен в то время как yield return секунд, Unity выдает ошибку в строке, где я установил скорость твердого тела равной нулю. Он не заботится о проверках нулевого объекта, где бы я их ни поместил. Скрипт прикреплен к инстанцированному игровому объекту.

public IEnumerator GetOutState (GameObject target) {

        state = State.GetOut;
        if (state == State.GetOut && gameObject != null)  {
            rbMissile.velocity = -transform.up * speed;

            yield return new WaitForSecondsRealtime(1);

            rbMissile.velocity = Vector2.zero;


            StartCoroutine(FlyState(target));

        }

    }

1 Ответ

1 голос
/ 05 мая 2020

К какому игровому объекту прикреплен этот скрипт? Вы проверяете, является ли игровой объект, прикрепленный к скрипту, нулевым с помощью

if (state == State.GetOut && gameObject != null)  {

, вы имели в виду поставить

if (state == State.GetOut && rbMissile != null)  {

Также, если это не решит проблему, ваша проблема, вероятно, состоит в том, что :

StartCoroutine(FlyState(target));

Что-то в методе FlyState ссылается на нулевой игровой объект

если

if (state == State.GetOut && rbMissile != null)  { 

не исправил это, ваша ракета разрушается между этим вызывается метод и задержка в одну секунду из:

yield return new WaitForSecondsRealtime(1);

Два возможных исправления: изменить IEnumerator на метод void и удалить

 yield return new WaitForSecondsRealtime(1);

или добавить еще одну проверку через секунду проходит

if (rbMissle != null) {
rbMissile.velocity = Vector2.zero;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...