我正在尝试使用一个序列化int
的对象,该对象将产生我指定的对象数量。当我将数字更改为较小的数字时,显然应该删除并销毁先前创建的数字。
然而,这会导致问题Update
与ExecuteInEditMode
一起工作,因为只要场景发生变化,它就会执行,因此变得更加困难。
[ExecuteInEditMode]
public class Floor : MonoBehaviour
{
[SerializeField] GameObject gameObject;
[SerializeField] bool destroy;
private void Update()
{
if (destroy)
{
destroy = !destroy;
gameObject.Destroy();
}
}
}
虚幻引擎使用此模式的原因很多是具有可见的bool
,该destroy
本身会关闭并表现得更像是编辑器中的按钮,非常方便。这将允许我按gameObject
并销毁对象。显然,如果没有检查,它将破坏Update
,并再次调用Update
,它将再次破坏它,依此类推。
我以为通过添加此布尔检查,当再次调用ExecuteInEditMode
时,它不会执行任何操作,因此循环将停止,但是不会,它继续进行并导致无限循环。
我也尝试过使用Corroutine,但这并不能解决任何问题。
有没有办法删除Update
中的对象而不会导致无限循环?也许有一种比{{1}}更好的方法,当 场景中有什么变化吗?
答案 0 :(得分:2)
尝试
GameObject.DestroyImmediate(gameObject);
在编辑模式下:https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html
答案 1 :(得分:0)
由于DestroyImmediate()
被延迟(延迟解构将永远不会在编辑模式下执行),因此在编辑模式下使用Destroy()
。
团结文档:https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html