【问题标题】:How can I fix "The object of type 'GameObject' has been destroyed but you are still trying to access it"如何修复“'GameObject'类型的对象已被破坏但您仍在尝试访问它”
【发布时间】:2021-11-11 05:57:50
【问题描述】:

我通过取消选中 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);

}

} Here is the error in unity

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

【问题讨论】:

  • 为什么要打两次Fall?首先调用它,然后以 .2 延迟调用它。似乎在第二次调用中,gamebject 已经被销毁了。您需要修复它或在销毁它之前检查游戏对象是否为空,仅在它不为空的情况下销毁它:)
  • 我刚刚测试了代码,它对我来说很好用。但我认为这与@rustyBucketBay 已经说过的话有关。您正在调用该方法两次。上面的代码是您使用的确切代码吗?
  • @DanielM 是的,上面的代码是我正在使用的确切代码。所以我只需要删除 Fall() 并使用 Invoke("Fall", 0.2f);对。
  • @TalonTài 是的,你一定要试试。
  • @DanielM 谢谢我删除了 Fall() 并重置了统一,它可以正常工作,哈哈。

标签: c# android unity3d game-engine


【解决方案1】:

您当前的代码流程如下:

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

更新:我假设您想立即将运动学设置为 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
    }
}

快乐编码:)

【讨论】:

  • 您的代码不会产生与 OP 的代码相同的行为。在 OP 的代码中,平台将等待 0.2 秒直到它崩溃。然后它会在 1 秒后自行销毁,总共需要 1.2 秒。在您的代码中,平台将立即倒下并在 1 秒后销毁。
  • @DanielM 真的!我假设他们想立即禁用运动学:) 更新了答案。
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多