Отследить полную загрузку редактора [решено другим путем]

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

Отследить полную загрузку редактора [решено другим путем]

Сообщение nile 26 июл 2013, 12:08

Написан класс для редактора, задача которого при старте производить автоматическую синхронизацию с моно. Синхронизация осуществляется вызовом пункта меню таким образом:
EditorApplication.ExecuteMenuItem ("Assets/Sync MonoDevelop Project");

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

Вопрос, есть ли способы отследить полноценную загрузку интерфейса?


На данный момент проблему решил костылями с таймером EditorApplication.timeSinceStartup , вроде работает, но хотелось что чтобы по-честному.
Синтаксис:
Используется csharp
using UnityEditor;

[InitializeOnLoad]
class SyncOnStart
{
        static bool done = false;

        static SyncOnStart ()
        {
                if (!done) EditorApplication.update += Update;
        }

        static void Update ()
        {
                if (EditorApplication.timeSinceStartup >= 5 && EditorApplication.timeSinceStartup < 10) {      

                                EditorApplication.ExecuteMenuItem ("Assets/Sync MonoDevelop Project");
                                done = true;

                }              
        }
}
 


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

Есть идеи?
Последний раз редактировалось nile 26 июл 2013, 13:21, всего редактировалось 1 раз.
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17

Re: Отследить окончательную загрузку редактора

Сообщение nile 26 июл 2013, 13:20

Решено так:

Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;
using System.IO;

[InitializeOnLoad]
class SyncOnStart
{
        static SyncOnStart ()
        {
        if (EditorApplication.timeSinceStartup < 5)
        {
            string dir = Directory.GetCurrentDirectory();
            string path2 = dir + "/" + Path.GetFileNameWithoutExtension(dir) + ".sln";
            FileInfo info = new FileInfo(path2);
            System.Diagnostics.Process.Start(info.FullName);
        }      
        }
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17


Вернуться в Editor

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

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