【问题标题】:Unity 'the object of type has been destroyed' errorUnity'类型的对象已被破坏'错误
【发布时间】:2015-11-22 21:44:20
【问题描述】:

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

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;

【问题讨论】:

  • if (GetComponent() != null) { ... } 我不确定,但可以试试。
  • 当我写它时,光线投射条件不起作用。
  • 没有错误,但是没有通过if条件
  • 我认为这是另一个需要解决的问题。需要更多细节来解决。使用更多详细信息编辑您的问题。
  • 打印返回对象名称的“gameobject”没有问题。我刚刚编辑了我如何实例化它的问题。

标签: c# unity3d


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我不能确定,但​​由于这个方法是在Update 中调用的,你可能会尝试两次销毁同一个对象(实际上是组件)。

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

    要解决它,您可能需要检查对象 Cube 组件是否为空,而不是其自身:

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

    【讨论】:

    • 我测试了它,我在你写的那一行遇到了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2020-08-19
    • 2012-04-30
    • 2020-02-22
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多