如何在ExecuteInEditMode中的Unity中删除对象

时间:2018-08-27 15:45:01

标签: c# unity3d stack-overflow infinite-loop

我要做什么

我正在尝试使用一个序列化int的对象,该对象将产生我指定的对象数量。当我将数字更改为较小的数字时,显然应该删除并销毁先前创建的数字。

然而,这会导致问题UpdateExecuteInEditMode一起工作,因为只要场景发生变化,它就会执行,因此变得更加困难。

我尝试过的

[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}}更好的方法,当 场景中有什么变化吗?

2 个答案:

答案 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