Когда становятся валидными размеры окна редактора

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Когда становятся валидными размеры окна редактора

Сообщение seaman 08 окт 2011, 19:33

Обнаружил такую не очень хорошую вещь.
Синтаксис:
Используется csharp
class MyEditor : EditorWindow
{
    pritvate bool _init;
    [MenuItem("WOT/MyEditor")]
    public static MyEditor Start()
    {
        MyEditor w = GetWindow<MyEditor>(false, "My Editor");
        Debug.Log("ONE!!! X= " + w.position.x + " Y= " + w.position.y + " W= " + w.position.width + " H= " + w.position.height);
        return w;
    }
    public void OnEnable()
    {
        name = "My Editor";
        wantsMouseMove = true;
        autoRepaintOnSceneChange = false;
        Debug.Log("ZERO!!! X= " + position.x + " Y= " + position.y + " W= " + position.width + " H= " + position.height);
        _InitStyle();
    }
    public void OnGUI()
    {
        if (EditorApplication.isCompiling) return;
        if (!_init)
        {
            Debug.Log("Two!!! X= " + position.x + " Y= " + position.y + " W= " + position.width + " H= " + position.height);
            _Init();
        }

Вопросы на засыпку. В каком порядке будут вызваны методы? Совпадут ли выведенные в консоль значения? И если не совпадут где будут выведены правильные размеры окна?
Мне почему то казалось, что сначала должен вызываться метод, который определяет меню, затем OnEnable, а затем OnGUI. И размеры окна должны быть верными сразу после его создания, т.е. после вызова метода GetWindow. Оказывается нет:
Изображение
Первым вызывается OnEnable, затем метод меню, затем, естественно OnGUI (в следующем кадре, как я понимаю). А верные размеры окна выдает только в OnGUI.
Вопрос - так и должно быть, или я что-то не так делаю? Вопрос - это где-то в мануале есть, или нет?
Почему вопросы, раз я вроде бы уже все сделал? Потому что было бы гораздо удобнее получить размеры окна (начальные, я понимаю, что они могут измениться) в OnEnable. Настроить все под них. А в OnGUI только следить за их изменением.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Когда становятся валидными размеры окна редактора

Сообщение Neodrop 09 окт 2011, 13:34

Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Когда становятся валидными размеры окна редактора

Сообщение seaman 09 окт 2011, 15:12

Спасибо, но это я знаю. Наверное сбивает название метода:
Синтаксис:
Используется csharp
    [MenuItem("WOT/MyEditor")]
    public static MyEditor Start()

Этот метод ведь можно назвать как угодно. Например так:
Синтаксис:
Используется csharp
    [menu item("WOT/MyEditor")]
    public static MyEditor MenuItem()

Он вызывается, когда выбираешь пункт меню в редакторе. Так вот я считал, что он вызывается сразу, когда выбираешь пункт меню. А все остальные (Awake, OnAnable, Start) потом. Оказалось, что он действительно эквивалентен обычному Start, вызываемому перед первым Update.

ЗЫ: Я так понял, что иного быть не может. Если нужны верные размеры окна (возможно что-то еще), то инициализацию нужно делать при первом вызове OnGUI, а не в OnEnable или методе меню.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2