如何在 ExecuteInEditMode 中删除 Unity 中的对象
How to delete an object in Unity in ExecuteInEditMode
我想做什么
我正在尝试让一个对象具有序列化 int
,它将生成我指定数量的对象。当我将数字更改为较小的数字时,它显然应该删除并销毁之前创建的数字。
这导致了一个问题,但是,请按照 Update
与 ExecuteInEditMode
的工作方式进行操作,因为只要场景发生变化,它就会执行,这使得这变得更加困难。
我试过的
[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
我想做什么
我正在尝试让一个对象具有序列化 int
,它将生成我指定数量的对象。当我将数字更改为较小的数字时,它显然应该删除并销毁之前创建的数字。
这导致了一个问题,但是,请按照 Update
与 ExecuteInEditMode
的工作方式进行操作,因为只要场景发生变化,它就会执行,这使得这变得更加困难。
我试过的
[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