2016-09-17 8 views
0

Я пытаюсь создать экземпляр prefab, используя метод в скрипте PlayerController, когда событие drop происходит в сценарии TileController.Unity C# - Мгновенное создание prefab, вызывающего метод

Если я использую в TileController:

public void OnDrop (PointerEventData eventData){ 
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

сборных грузов правильно на сцене.

Но если я использую:

public void OnDrop (PointerEventData eventData){ 
    player.instantiatePlayer(); 
} 

Затем возвращается ошибка:

NullReferenceException: Object reference not set to an instance of an object 

Метод PlayerController я использую:

public void instantiatePlayer() {  
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

Я думаю, что это что-то на самом деле просто я пропущен, но я не могу определить, что это такое.

ответ

0

В вашем классе контроллера есть член с именем «player», но он не настроен ни на что, он равен нулю, поэтому вы получаете исключение NullReferenceException. Первый способ, которым вы это сделали, правильный.

+0

В классе TileController у меня есть: \t 'private PlayerController player; void Start() { \t player = GetComponent (); } ' – Aeross

+0

Убедитесь, что GameObject, на котором работает этот скрипт, подключен PlayerController. Если нет, добавьте один. Если это так, то нулевая ссылка находится где-то внутри вашего метода PlayerController.instantiatePlayer, поэтому присоедините Visual Studio к Unity с помощью расширения Visual Studio Tools for Unity, поместите разделительную линию на эту строку кода и вставьте в нее, чтобы увидеть, где ваша нулевая ссылка является. В окне консоли также должен отображаться стек вызовов исключения, если вы нажмете на него (если я правильно помню) –

0

Как вы комментируете сообщение Peter. Первая проверка в функции «Пуск» означает, что ваш «игрок» равен нулю, или нет. GetComponent просто пытается получить компонент, но если он не может найти, он вернет null.

Если это не null, проверьте, возможно, в каком-то коде вы уничтожаете объект под ссылкой игрока.