NullReferenceException并且不知道如何修复它

时间:2015-02-16 19:31:06

标签: unity3d nullreferenceexception instantiation

好吧,我正在制作一个简单的游戏机制,你可以在一个小面板上滚动。在面板的边缘是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。我在统一编辑器中分配了panelPrefab,但我不知道是什么原因造成的!如果有人能在这里帮助我,那将非常感激...所以提前谢谢你!

1 个答案:

答案 0 :(得分:0)

OnTriggerEnter之前调用

OnTriggerStay。该错误不是由panelPrefab对象引起的。您的rightSpawnleftSpawn等对象可能会为空,因此无法访问null对象的transform属性。

在实例化之前验证rightSpawn等是否为空,然后访问它的位置。

相关问题