Как исправить ошибку «объект типа« GameObject »уничтожен, но вы все еще пытаетесь получить к ней доступ» в Unity? - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю 2.5D файтинг в Unity с C #.В настоящее время я пытаюсь заставить бампер появляться вокруг плеера и исчезать через определенное время.Мне удалось заставить бампер появляться и исчезать один раз, но после этого, когда я пытаюсь заставить бампер появляться снова, Unity имеет для меня ошибку: «Объект типа« GameObject »был уничтожен, но вы все еще пытаетесьчтобы получить к нему доступ. "

Я пытался использовать команды" instantiate "и" destroy ", следуя инструкции" Brackeys "по 2D-съемке.После того, как после нескольких вопросов на форумах об этой же проблеме, я снова изменил свой код, но проблема сохраняется.

firePoint - пустой объект, из которого создается экземпляр BumperPrefab.

using UnityEngine;

public class weapon: MonoBehaviour
{
    public Transform firePoint;
    public GameObject BumperPrefab;
    public float lifetime = 0.2f;

void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        attack();
    }

}
void attack()
{
    BumperPrefab = (GameObject) Instantiate(BumperPrefab, firePoint.position, firePoint.rotation);
    Destroy(BumperPrefab, lifetime);
}

}

Я ожидаю, что GameObject "BumperPrefab" появится, задержится на 0,2 секунды и исчезнет.Я должен быть в состоянии повторить это столько раз, сколько захочу, но на самом деле происходит то, что я могу сделать это только один раз, а затем появляется ошибка «Объект типа« GameObject »уничтожен, но вы все еще пытаетесь получить к нему доступ»появляется, и я не могу заставить BumperPrefab появляться снова.

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Проблема в том, что в вашем коде вас не волнует, существует ли ваш GameObject.Так, например, если (по какой-то причине) объект BumperPrefab не будет создан, Destory () попытается действовать с нулевым значением.Вы можете попробовать добавить в BumperPrefab скрипт bumper.cs с помощью:

float lifetime = 0.2f;

private void OnEnable()
{
Desroy(this, lifetime)
}
0 голосов
/ 08 февраля 2019
using UnityEngine;

public class weapon: MonoBehaviour
{
    public Transform firePoint;
    public GameObject BumperPrefab;
    public float lifetime = 0.2f;

void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        attack();
    }

}
void attack()
{
    var bumper = (GameObject) Instantiate(BumperPrefab, firePoint.position, firePoint.rotation);
    Destroy(bumper, lifetime);
}

Прямо сейчас вы перезаписываете свое открытое поле, содержащее готовый объект, своим экземпляром, а затем уничтожаете его.Установите экземпляр объекта в качестве переменной, и все будет в порядке.

...