unity3d nullreferenceexception对象引用未设置为对象unity的示例

23c0lvtd  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(251)

这是我的播放器spawn的代码,但我得到了一个空引用异常错误。

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

    void Start () 
    {       
        if(playerSpawn != null)
        {
            transform.position = playerSpawn.position;  
            Debug.Log(playerSpawn);
        }
    }
    
    void Update () 
    {
        if(activeRespawnTimer)
        {
            respawnTimer -= Time.deltaTime;
        }
        
        if(respawnTimer <= 0.0f)
        {
            transform.position = currentTrackPosition;
            respawnTimer = resetRespawnTimer;
            activeRespawnTimer = false;
        }
    }
    
    void OnTriggerEnter2D(Collider2D other)
    {
        //im getting the error messege at this position
        if(other.tag == "DeadZone")
        {
            activeRespawnTimer = true;  
        }

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

有什么问题吗?谢谢你的帮助。

pgky5nke

pgky5nke1#

根据您提到的空引用异常发生的位置,看起来好像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;
        }
    }
}

如果这仍然抛出异常,那么一定是其他原因导致了这个问题,所以请告诉我这是如何解决的。

相关问题