【问题标题】:How to delete an object in Unity in ExecuteInEditMode如何在 ExecuteInEditMode 中删除 Unity 中的对象
【发布时间】:2018-08-27 15:45:01
【问题描述】:

我想做什么

我试图让一个对象具有序列化的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 时,它不会做任何事情,所以循环会停止,但是不,它会继续并让我进入一个无限循环。

我也尝试过使用 Corroutine,但这并没有解决任何问题。

有什么方法可以在不导致无限循环的情况下删除ExecuteInEditMode 中的对象?也许有比Update 更好的方法,它不会在任何东西 时更新> 在场景变化?

【问题讨论】:

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


    【解决方案1】:

    试试

    GameObject.DestroyImmediate(gameObject);

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-16
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多