Я получаю Исключение по отсутствующим ссылкам при использовании функции Destroy () - PullRequest
2 голосов
/ 18 июня 2019

Я пытаюсь сделать стрелялку и хочу установить диапазон для пули.Это значит, что когда его застрелили, он летит некоторое время, а затем уничтожается.

Я пробовал функцию Destroy;однако способ, которым я реализовал код, выглядит так, как будто он пытается уничтожить исходную пулю с точки запуска, а не в конце ее диапазона.

вот мой код:

if (Input.GetKey("space"))
{
    Instantiate(bullet, transform.position + new Vector3(0, 0, 1), bullet.rotation);
    Destroy(bullet, 0.4f);
}

Он просто сработает один раз, тогда я получу MissingReferenceException.

1 Ответ

2 голосов
/ 18 июня 2019

Вы уничтожаете сборный дом. Когда вы создаете экземпляр, вы получаете обратную ссылку, то есть фактический игровой объект, который вы хотите уничтожить.

if (Input.GetKey("space"))
{
    GameObject bulletInstance; //or whatever type your bullet is
    bulletInstance = Instantiate(bullet, transform.position + new Vector3(0, 0, 1), bullett.rotation);
    Destroy(bulletInstance , 0.4f); //if you instantiated via a component, you have to destroy bulletInstance.gameObject or you'll only destroy the component
}

https://docs.unity3d.com/Manual/InstantiatingPrefabs.html

Изменить: Обратите внимание, что это создает много мусора и предназначено только для ответа на ваш вопрос, вы должны рассмотреть возможность использования пула объектов пула. https://learn.unity.com/tutorial/object-pooling

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...