2016-07-03 6 views
3

Я пытаюсь получить доступ к скрипту в другом игровом объекте, который был создан в моем скрипте, и независимо от того, что я делаю, скрипт всегда возвращает null.Unity - GetComponent на возвращаемом объекте Возвращает Null

Сначала я создаю объект игры, делая это.

asteroid = (GameObject)Instantiate(asteroidPrefab); 

после этого я стараюсь acessing свой сценарий, делая это:

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent(typeof(AsteroidHandler)); 

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

if(handler == null){ 
    Debug.Log("Asteroid Handler is Null"); 
}else{ 
    Debug.Log("Asteroid Handler was setup properly"); 
} 

Проблема заключается в всегда имеет нулевой вариант. У меня есть сценарий AsteroidHandler, прикрепленный к prefab asteroidPrefab, и когда я запускаю его, он запускается правильно, так как я вижу астероид на экране. Тем не менее, когда я пытаюсь получить доступ к скрипту AsteroidHandler, который привязан к нему, он, похоже, действует так, как будто его нет;

Я попробовал несколько других методов, чтобы получить доступ к AsteroidHandler, но все они говорят, что его нуль:

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent<AsteroidHandler>(); 

.

AsteroidHandler handler = (AsteroidHandler)asteroid.GetComponent(typeof(AsteroidHandler)) as Asteroid Handler; 

Я рассмотрел пару других вопросов, подобных моим, но ни один из ответов, похоже, не помогает.

Любая помощь будет оценена по достоинству.

+0

У вас есть сценарий на сборке –

+0

проверьте, все ли прикреплено к сборнику и оно сохраняется в проекте (не только в иерархии) – Bijan

ответ

4

не может быть проще,

добавить этот код

asteroid = (GameObject)Instantiate(asteroidPrefab); 
// add this... 
asteroid.name = "Added test item"; 

запустить программу и подождать, пока не появится «Добавлен тестовый пункт»

Проверьте, вы также увидеть «Обработчик астероидов является нулевым»

Теперь, буквально посмотрите на свой Хей rarchy для сцены, и найдите объект с именем Добавлен тестовый элемент

Посмотрите внимательно на инспектора, посмотрите, что вы видите.

+0

ugh Я настолько глуп. Когда я это сделал, объектом, который был изменен на «Добавленный тестовый элемент», был другой объект. В принципе, prefab, который я поставил для asteroidPrefab в редакторе единства, не был правильным сборником, поэтому в нем не было скрипта. Это определенно кажется хорошим способом проверить, правильно ли создан ваш экземпляр-объект, и что это правильный объект XD. Спасибо, и я сожалею, что тратил ваше время с такой глупой проблемой. – Bhaskar

+0

Ты не такой глупый, ты явно талантливый разработчик **, поскольку первое, что ты сделал, это добавить строку Debug.Log **, как вы упомянули. Отлично! Это знак превосходства. Ура! – Fattie

+0

Если вы новичок в Unity, вот невероятно полезный пост http://stackoverflow.com/questions/35890932/unity-game-manager-script-works-only-one-time/35891919#35891919 – Fattie

Смежные вопросы