Открыть браузер ресурсов по нажатию кнопки в инспекторе

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

Открыть браузер ресурсов по нажатию кнопки в инспекторе

Сообщение DDDENISSS 11 фев 2012, 00:25

Можно при нажатии на Button сразу открыть браузер ассетов и выбрать нужный?
Рисовать лишнее поле через EditorGUILayout.ObjectField не очень хочется.
Нужно сделать что-то типа добавление текстур, деревьев в редакторе терейна.
Вот только не хочу, что бы при нажатии на кнопку открывалось окно как там.

Если в стандартных функциях такого нету, то можно как-то свою написать? Чтобы было типа такого:
GameObject go = GameObjectBrowser.Show();
// тут поток приостанавливается пока не выберем объект или не закроем окно.
А то не хочется переносить код добавления объекта в список в какое-то отдельное окно.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Открыть браузер ресурсов по нажатию кнопки в инспекторе

Сообщение DDDENISSS 11 фев 2012, 11:21

Вот EditorUtility.SaveFilePanel хорошо сделан. Сразу открывается браузер. И поток ставится на паузу пока браузер не закроется.
Как можно самому сделать, что бы открывалось окно с EditorGUILayout.ObjectField и кнопкой OK и поток ставился на паузу пока не нажмется кнопка Ok? Т.е. как можно сделать паузу, продолжение потока, что бы не повисло все?
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Открыть браузер ресурсов по нажатию кнопки в инспекторе

Сообщение DDDENISSS 11 фев 2012, 17:11

Почему тут не работает пауза? Т.е. Monitor.Enter(window.locker);
Синтаксис:
Используется csharp
public class ContentBrowser : EditorWindow {
       
        private object locker = new object();
        private GameObject _object;

    public static GameObject Show() {
        ContentBrowser window = GetWindow<ContentBrowser>();
        window.title = "Content Browser";
                Monitor.Enter(window.locker);
                return window._object;
    }

    // Функция отрисовки окна
    public void OnGUI() {
        GUILayout.BeginHorizontal();
        GUILayout.Label("Object: ");
        _object = (GameObject)EditorGUILayout.ObjectField(_object, typeof(GameObject));
        GUILayout.EndHorizontal();
               
                if( GUILayout.Button("Ok",  GUILayout.ExpandWidth(true)) ) {
                        Close();
                        Monitor.Exit(locker);
                }
    }
       
}
 

Такое вообще можно реализовать?
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Открыть браузер ресурсов по нажатию кнопки в инспекторе

Сообщение DDDENISSS 12 фев 2012, 20:14

Только сейчас заметил, что EditorUtility.SaveFilePanel открывает не юнитивское окно и поток юнити можно спокойно приостановить до закрытия окна.
С окном EditorWindow видно никак этого не сделать.
Скажите, а с помощью корутин можно прервать выполнение метода после открытия окна и продолжить после закрытия?

Вообщем написал такой класс:
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;

public class ContentBrowser : EditorWindow {
       
        public delegate void AddObjectFunction(GameObject go);
        private GameObject go;
        private AddObjectFunction addObject;

    public static void Show(AddObjectFunction addObject) {
                ContentBrowser window = GetWindow<ContentBrowser>();
        window.title = "Content Browser";
                window.addObject = addObject;
    }

    // Функция отрисовки окна
    public void OnGUI() {
        GUILayout.BeginHorizontal();
        GUILayout.Label("Object: ");
        go = (GameObject)EditorGUILayout.ObjectField(go, typeof(GameObject));
        GUILayout.EndHorizontal();
               
                if( GUILayout.Button("Ok",  GUILayout.ExpandWidth(true)) ) {
                        Close();
                        addObject(go);
                }
    }
       
}
 

Просто передаем ссылку на функцию, которая будет обрабатывать выбор объекта. Вообщем-то как и хотел. Вынес логику обработки выбора объекта из этого класса.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33


Вернуться в Editor

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

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