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;
我解决了我的问题,它是我对象上的一个委托方法,我刚刚删除了它。
我不能确定,但由于这个方法是在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) { ... }