首页 > 解决方案 > 如何修复“'GameObject'类型的对象已被破坏但您仍在尝试访问它”

问题描述

我通过取消选中 isKinematic 来创建平台下降效果,但我不断收到错误消息:“MissingReferenceException:'GameObject' 类型的对象已被破坏,但您仍在尝试访问它。这是我的代码:

// Update is called once per frame
void Update()
{
    
}

private void OnCollisionExit(Collision collision){
    if(collision.gameObject.tag == "Player")
    {
        Fall();
        Invoke("Fall", 0.2f); //delay 0.2 s chu y dau va viet thuong
    }
}

void Fall(){
    GetComponent<Rigidbody>().isKinematic = false;
    Destroy(gameObject,1f);

}

是统一的错误

谁能知道如何解决这个问题?谢谢你。

标签: c#androidunity3dgame-engine

解决方案


您当前代码的流程如下:

  • 调用Fall()一次(从调用开始 1 秒后,游戏对象将被销毁)。
  • 您正在使用 Invoke 在0.2 秒后调用Fall() ,而您已经有任务从第一次调用中销毁游戏对象。

更新:我假设您想立即设置 kinematic false 。我更新了这段代码:)


代码

using UnityEngine;

public class Q69205071 : MonoBehaviour
{
    private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            //Fall(1f);
            /// since you want everything to be executed after 0.2 seconds
            /// you could use Invoke or coroutines.
            Invoke("Fall", 0.2f); 
        }
    }

    private void Fall()
    {
        GetComponent<Rigidbody>().isKinematic = false;
        Destroy(gameObject, 1f); // 1 seconds delay before destroying the gameObject
    }
}

快乐编码:)


推荐阅读