Создание префаба возвращает ошибку NullReferenceException - PullRequest
2 голосов
/ 27 сентября 2019

Я использую namespace для создания экземпляра prefab в моей игре, однако Unity считает, что prefab - это не GameObject и возвращает NullReferenceException ошибку

связал Prefab, правильно в GameObject, который содержит скрипт.Это код, который у меня есть в настоящее время в Visual Studio, но я также пробовал различные формы кода, они следующие за первыми строками кода

public GameObject Prefab;
public void OnAppear(){
GameObject spawn = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation);
spawn.transform.parent = Spawnpoint.transform;}

V1 var spawn = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation);

V2var spawn = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation) as GameObject;

Весь сценарий:

namespace AugReal
{
    public class StartAll : MonoBehaviour
    {
        public Transform Spawnpoint;
        public GameObject Prefab;

        public void OnAppear()
        {
            GameObject spawn = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation);
            spawn.transform.parent = Spawnpoint.transform;
        }

        public void OnDisappear()
        {
            Debug.Log("You lose");
        }
    }
}

Инспектор:

enter image description here

1 Ответ

1 голос
/ 27 сентября 2019

Попробуйте вместо этого следующий код:

  1. Вам не нужно создавать общедоступную ссылку на преобразование, к которому присоединен этот скрипт.Поскольку сценарий является монобеем поведения, вы можете напрямую получить к нему доступ через this.transform
  2. Вместо того, чтобы явно устанавливать родительский объект после создания экземпляра, рассмотрите возможность назначения метода Instantiate с переопределением родительского элемента.

(Я также изменил регистр для вашего свойства "Prefab". Он не влияет на код, но стандартным является сохранение имен свойств camelCase, чтобы отличать их от типов классов PascalCased.)

namespace AugReal
{
    public class StartAll : MonoBehaviour
    {
        public GameObject prefab;

        public void OnAppear()
        {
            GameObject spawn = Instantiate(prefab, this.transform);
        }

        public void OnDisappear()
        {
            Debug.Log("You lose");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...