nullreferenceexception对象引用未设置为对象统一的实例

时间:2014-03-31 05:45:26

标签: unity3d unityscript

大家好,这是我的播放器spawn的代码但是我得到了nullreferenceexception :(

using UnityEngine;
using System.Collections;
public class PlayerSpawn : MonoBehaviour 
{
public Transform playerSpawn;
public Vector2 currentTrackPosition;
public bool activeRespawnTimer                  = false;
public float respawnTimer                   = 1.0f;
public float resetRespawnTimer              = 1.0f;



// Use this for initialization
void Start () 
{       

    if(playerSpawn != null)
    {
        transform.position = playerSpawn.position;  
        Debug.Log(playerSpawn);
    }
}

// Update is called once per frame
void Update () 
{
    if(activeRespawnTimer)
    {
        respawnTimer -= Time.deltaTime;
    }

    if(respawnTimer <= 0.0f)
    {
        transform.position = currentTrackPosition;
        respawnTimer = resetRespawnTimer;
        activeRespawnTimer = false;
    }
}

void OnTriggerEnter2D(Collider2D other)
{

//我在这个位置获取错误信息

    if(other.tag == "DeadZone")
    {

        activeRespawnTimer = true;  
    }

    if(other.tag == "CheckPoint")
    {
        currentTrackPosition = transform.position;

    }


}
}

我在Unity中获得此错误nullreferenceexception对象引用未设置为对象统一的实例。 我是新手。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

鉴于您提到空位引用异常的位置,看起来好像otherother.tag为空。考虑到OnTriggerEnter仅在实际对象进入触发器时被调用,我高度怀疑other是否为空,除非它在被调用方法之前被销毁。无论如何,安全比抱歉更好。

一个简单的解决方案如下:

void OnTriggerEnter2D(Collider2D other)
{
    if(other != null && other.tag != null)
    {
        if(other.tag == "DeadZone")
        {
            activeRespawnTimer = true;  
        }

        if(other.tag == "CheckPoint")
        {
            currentTrackPosition = transform.position;
        }
    }
}

如果这仍然引发异常,那么它必定是造成问题的其他因素,所以让我知道这是如何解决的。