2015-02-16 3 views
0

Хорошо, я делаю простой игровой механик, где вы играете мяч по небольшой панели. На краю панели находятся 8 дочерних объектов. 4 из них являются триггерами по краям панели, а 4 из них - пустыми игровыми объектами на расстоянии 1 единицы от каждого края панели для размещения следующей сборной панели для появления в ней. У мяча есть спусковой механизм, который определяет местоположение пустых игровых объектов, чтобы сообщить сборку панели, где икрой. Когда мяч вводит определенный триггер на панели, предполагается, что мяч создает экземпляр панели в месте, которое я назначаю, на основе триггера, в который входит мяч. Вот мой код:NullReferenceException и не знаю, как исправить это

public GameObject panelPrefab; 

Transform frontSpawn; 
Transform backSpawn; 
Transform leftSpawn; 
Transform rightSpawn; 

private bool allowSpawn; 

void Awake() 
{ 
    allowSpawn = true; 
} 

void OnTriggerStay(Collider spawn) 
{ 
    if (spawn.gameObject.tag == "FrontSpawn") 
    { 
     frontSpawn = spawn.transform; 
    } 
    else if (spawn.gameObject.tag == "BackSpawn") 
    { 
     backSpawn = spawn.transform; 
    } 
    else if (spawn.gameObject.tag == "LeftSpawn") 
    { 
     leftSpawn = spawn.transform; 
    } 
    else if (spawn.gameObject.tag == "RightSpawn") 
    { 
     rightSpawn = spawn.transform; 
    } 
} 

void OnTriggerEnter (Collider other) 
{ 
    if (other.gameObject.tag == "Front" && allowSpawn == true) 
    { 
     Instantiate (panelPrefab, frontSpawn.transform.position, Quaternion.identity); 
     allowSpawn = false; 
    } 
    else if (other.gameObject.tag == "Back" && allowSpawn == true) 
    { 
     Instantiate (panelPrefab, backSpawn.transform.position, Quaternion.identity); 
     allowSpawn = false; 
    } 
    else if (other.gameObject.tag == "Left" && allowSpawn == true) 
    { 
     Instantiate (panelPrefab, leftSpawn.transform.position, Quaternion.identity); 
     allowSpawn = false; 
    } 
    else if (other.gameObject.tag == "Right" && allowSpawn == true) 
    { 
     Instantiate (panelPrefab, rightSpawn.transform.position, Quaternion.identity); 
     allowSpawn = false; 
    } 
} 

void OnTriggerExit (Collider other) 
{ 
    allowSpawn = true; 
} 

Мой вопрос по каждому из Instantiate вызовов, я получаю NullReferenceException. У меня есть panelPrefab, назначенный в редакторе единства, и я не знаю, что может быть причиной этого! Если кто-нибудь может мне помочь здесь, это было бы ВЕЛИКОЕ оценено ... Так что спасибо заранее!

+0

Случалось со мной один раз. Сначала попробуйте spawn.gameObject.transform; вместо spawn.transform; Если это не решило, глупо, вам нужно перезапустить Unity/PC/Mac и т. Д. Надеюсь, что он будет решен. –

+0

Конечно, ваш идеал должен сказать, какая строка дает эту ошибку. пожалуйста, сообщите линии для более легкого и точного ответа. – virtouso

ответ

0

OnTriggerEnter вызывается до OnTriggerStay. Ошибка связана не с объектом panelPrefab. Возможно, ваши объекты rightSpawn, leftSpawn и т. Д. Являются нулевыми и, следовательно, не могут получить доступ к свойству преобразования нулевого объекта.

Перед созданием экземпляра проверьте, является ли rightSpawn и т. Д. Нулевым или нет, а затем доступ к его положению.

+0

Я даже не думал о размещении OnTriggers ... Но да, rightSpawn, leftSpawn и т. Д. Являются нулевыми, и я не знаю, что с этим делать, поэтому я ищу новый метод. Но все равно спасибо! – JosephT45

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