繁体   English   中英

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

[英]Unity 'the object of type has been destroyed' error

我用这种方法在游戏中破坏了一个物体:

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

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

我在网上看到我们必须测试gameobject是否不为null,但是当我测试它时,在以下情况下我遇到了相同的错误:

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

感谢您的回答!

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM