我用这种方法摧毁了游戏中的一个物体:
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;
答案 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) { ... }