如何修复“'GameObject'类型的对象已被破坏但您仍在尝试访问它”
Posted
技术标签:
【中文标题】如何修复“\'GameObject\'类型的对象已被破坏但您仍在尝试访问它”【英文标题】: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() 并重置了统一,它可以正常工作,哈哈。
【参考方案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 真的!我假设他们想立即禁用运动学:) 更新了答案。以上是关于如何修复“'GameObject'类型的对象已被破坏但您仍在尝试访问它”的主要内容,如果未能解决你的问题,请参考以下文章