Как удалить объект в Unity в ExecuteInEditMode - PullRequest
0 голосов
/ 27 августа 2018

Что я пытаюсь сделать

Я пытаюсь получить один объект с сериализованным 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 был вызван снова, он ничего не сделал бы, поэтому цикл остановился бы, но нет, он продолжается и дает мне бесконечный цикл.

Я также пытался использовать Corroutine, но это ничего не исправило.

Есть ли способ удалить объект в ExecuteInEditMode, не вызывая бесконечный цикл? Может быть, есть лучший метод, чем Update, который не обновляется, когда что-либо в сцена меняется?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Используйте DestroyImmediate() в режиме редактирования, поскольку Destroy() задерживается (отложенная деконструкция никогда не будет выполняться в режиме редактирования).

документы для единства: https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html

0 голосов
/ 27 августа 2018

Попробуйте

GameObject.DestroyImmediate (gameObject);

в режиме редактирования: https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html

...