NullReferenceException и не знаю, как это исправить

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

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. У меня есть панельPrefab, назначенная в редакторе единства, и я не знаю, что может быть причиной этого! Если кто-нибудь может помочь мне здесь, это было бы ОЧЕНЬ признательно ... Так что заранее спасибо!


person JosephT45    schedule 16.02.2015    source источник
comment
Однажды со мной случилось. Сначала попробуйте spawn.gameObject.transform; вместо spawn.transform; Если это не помогло, глупо, что вам нужно перезапустить Unity / PC / Mac и т. Д. Надеюсь, что проблема будет решена.   -  person Imtiaj Ahmed    schedule 17.02.2015
comment
конечно, ваш ide должен сказать, какая строка дает эту ошибку. Для более легкого и точного ответа укажите, пожалуйста, линию.   -  person virtouso    schedule 18.02.2015


Ответы (1)


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

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

person Ilona Hari    schedule 19.02.2015
comment
Я даже не думал о размещении OnTrigger ... Но да, rightSpawn, leftSpawn и т. Д. Имеют значение null, и я не знаю, что с этим делать, поэтому я ищу новый метод. Но все равно спасибо! - person JosephT45; 19.02.2015