Сделать объект нельзя выделить в окне редактора


У меня есть fadepanel gameobject в моей сцене, которая должна сидеть поверх всех других игровых объектов. Однако, когда я нажимаю на объект в окне редактора, так как этот gameobject находится поверх всех, это тот, который автоматически выбирается в иерархии.

Есть ли способ сохранить gameobject поверх холста, как это происходит прямо сейчас, но сделать его полностью невыбираемым, когда я нажимаю на свою сцену?

1 3

1 ответ:

Вы можете использовать HideFlags on gameobject, чтобы сделать его невыбираемым:

public class HideFlagsSetter : MonoBehaviour
{
    public Component target;
    public HideFlags customHideFlags;

    public enum Mode
    {
        GameObject,
        Component
    }

    public Mode setOn = Mode.GameObject;

    [ContextMenu("Set Flags")]
    private void SetFlags()
    {
        if (setOn == Mode.GameObject)
        {
            target.gameObject.hideFlags = customHideFlags;
        }
        else if (setOn == Mode.Component)
        {
            target.hideFlags = customHideFlags;
        }
    }
}

Установка customHideFlags в HideInHierarchy приведет к тому, что он исчезнет из иерархии, поэтому вы не сможете его выбрать.

Edit: поскольку объект исчезнет, нет никакого способа вернуть его обратно, если вы не можете получить доступ к скрипту. Таким образом, этот скрипт должен быть прикреплен к постоянному объекту, а целевой объект должен быть установлен в инспекторе.

Вы можете использовать опцию контекстного меню, нажав на значок шестеренки в верхней части экрана. в правом углу выберите пункт "установить флаги". это последняя опция в меню.

Подробнее


Надеюсь, это поможет :)

(ДОБАВЛЕНО ЛИЦОМ, ЗАДАВШИМ ВОПРОС)

Я хотел, чтобы это произошло автоматически в режиме редактора. Поэтому я сделал те же шаги, но немного изменил сценарий, чтобы работать в режиме редактора. Я добавил [ExecuteInEditMode] поверх класса, а также добавил метод Awake (), который выполняет тот же код, что и в SetFlags. Кажется, работает просто хорошо.