C# 如何在ExecuteInEdit模式下删除Unity中的对象 我想做什么

C# 如何在ExecuteInEdit模式下删除Unity中的对象 我想做什么,c#,unity3d,stack-overflow,infinite-loop,C#,Unity3d,Stack Overflow,Infinite Loop,我正试图创建一个具有序列化的int的对象,该对象将生成我指定的对象数。当我将数字更改为较低的数字时,它显然应该删除并销毁以前创建的数字 但是,这会导致Update使用ExecuteInEditMode的方式出现问题,因为每当场景发生更改时,它都会被执行,这使得操作更加困难 我试过的 虚幻引擎经常使用这种模式,它有一个可见的bool,它会自动关闭,并且更像编辑器中的一个按钮,这很方便。这将允许我按销毁并销毁对象。显然,如果没有检查,它将销毁游戏对象,并且再次调用更新,它将再次销毁它,依此类推 我想

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

但是,这会导致
Update
使用
ExecuteInEditMode
的方式出现问题,因为每当场景发生更改时,它都会被执行,这使得操作更加困难

我试过的 虚幻引擎经常使用这种模式,它有一个可见的
bool
,它会自动关闭,并且更像编辑器中的一个按钮,这很方便。这将允许我按
销毁
并销毁对象。显然,如果没有检查,它将销毁
游戏对象
,并且再次调用
更新
,它将再次销毁它,依此类推

我想通过添加这个布尔检查,当再次调用
Update
时,它不会做任何事情,因此循环会停止,但不会,它会继续并得到一个无限循环

我也试过用腐蚀剂,但没能解决任何问题

有没有办法在
ExecuteInEditMode
中删除一个对象而不引起无限循环?
也许有比
Update
更好的方法,在场景发生任何变化时不更新?

试试看

游戏对象。立即销毁(游戏对象)

在编辑模式下:

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

统一文件:

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

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