Unity';类型的对象已被销毁';错误

本文关键字:错误 类型 Unity 对象 | 更新日期: 2023-09-27 18:23:49

我正在用这种方法销毁游戏中的一个对象:

public override void triggerAction(GameObject cube)
{
    base.triggerAction(cube);
    if (cube.GetComponent<Cube>().type == type) {
        DestroyObject(cube);
    }
}

我得到了一个'The object of type 'Cube' has been destroyed but you are still trying to access it.'错误指向此方法(第一行):

if (Physics.Raycast(gameObject.transform.position, rayDir, out hit, 1f) && (hit.collider.gameObject.layer == layerMask)) {
        ActionObject obj = hit.collider.gameObject.GetComponent<ActionObject>();
        obj.triggerAction(gameObject);
}

此方法是在"Update"循环中调用的。

我在网上看到,我们必须测试游戏对象是否为空,但当我测试它时,我在条件下得到了相同的错误:

if (gameObject != null) { ... }

谢谢你的回答!

编辑:以下是我如何实例化我的对象=

public GameObject cube; // I put my prefab in the inspector 
...
GameObject newCube = Instantiate(cube) as GameObject;

Unity';类型的对象已被销毁';错误

我解决了我的问题,它是我对象上的一个委托方法,我刚刚删除了它。

我不能确定,但由于这个方法是在Update中调用的,所以您可能试图破坏同一个对象(实际上是组件)两次。

RayCast调用只考虑冲突器,因此当从cube对象中删除Cube组件时,除非Cube是冲突器,否则在下一帧中,同一对象仍然可以是RayCast的目标。但这一次,对象上没有任何Cube组件,您将得到'The object of type 'Cube' has been destroyed but you are still trying to access it.'错误。

要解决此问题,您可能需要检查对象Cube组件是否为null,而不是其本身:

if (gameObject.GetComponent<Cube>() != null) { ... }