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

How to delete an object in Unity in ExecuteInEditMode

我想做什么

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

这导致了一个问题,但是,请按照 UpdateExecuteInEditMode 的工作方式进行操作,因为只要场景发生变化,它就会执行,这使得这变得更加困难。

我试过的

[ExecuteInEditMode]
public class Floor : MonoBehaviour
{
    [SerializeField] GameObject gameObject;
    [SerializeField] bool destroy;

    private void Update()
    {
        if (destroy)
        {
            destroy = !destroy;
            gameObject.Destroy();
        }
    }
}

Unreal Engine 大量使用了这种模式,它有一个可见的 bool,它会自行关闭并且表现得更像编辑器中的一个按钮,这派上了用场。这将允许我按 destroy 并销毁该对象。显然,如果不检查,它会销毁gameObject,再次调用Update,它会再次销毁它,依此类推。

我想通过添加这个布尔检查,当再次调用 Update 时,它不会做任何事情所以循环会停止,但是不,它继续并让我陷入无限循环。

我也尝试过使用协程,但没有解决任何问题。

有没有什么方法可以删除 ExecuteInEditMode 中的对象而不导致无限循环? 也许有比 Update 更好的方法当场景中任何发生变化时更新?

尝试

GameObject.DestroyImmediate(游戏对象);

在编辑模式下:https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html

在编辑模式下使用DestroyImmediate(),因为Destroy()是延迟的(延迟解构永远不会在编辑模式下执行)。

统一文档:https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html