Unity'类型的对象已被破坏'错误

时间:2015-11-22 21:44:20

标签: c# unity3d

我用这种方法摧毁了游戏中的一个物体:

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);
}

此方法在“更新”中调用。循环。

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

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

感谢您的回答!

编辑:这是我实例化对象=

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我无法确定,但由于此方法是在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) { ... }