Editor для своего формата файла

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

Editor для своего формата файла

Сообщение DDDENISSS 22 дек 2012, 23:11

Пишу такой класс
Синтаксис:
Используется csharp
[CustomEditor(typeof(TextAsset))]
public class XmlEditor : Editor {
       
        private TextAsset xml;
       
        void OnEnable() {
                xml = (TextAsset) target;
        }

        public override void OnInspectorGUI() {
                GUILayout.Box(xml.text, GUILayout.ExpandWidth(true));
        }
}
 

Но как сделать, чтобы этот редактор работал только для xml файлов?
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Editor для своего формата файла

Сообщение Multirezonator 22 дек 2012, 23:36

Для своего формата файла - в начале файла добавляйте опознавательные символы, и проверяйте их наличие. Для xml это может быть "<?xml":
Синтаксис:
Используется csharp
private TextAsset xml;
//-------- some code here
if(xml.Substring(0, 5)=="<?xml")
     MonoBehaviour.print("файл соответствует уловиям");
 
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Editor для своего формата файла

Сообщение DDDENISSS 23 дек 2012, 01:20

Multirezonator, а если не мой файл, то что дальше? Как отменить работу этого инспектора и искать дальше подходящий инспектор?
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Editor для своего формата файла

Сообщение Woolf 23 дек 2012, 03:49

Может несколько не в тему, но я лично пишу свои редакторы к своим файлам, либо, если формат простой, использую plain text
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Editor для своего формата файла

Сообщение seaman 23 дек 2012, 09:01

Собственно = зачем в Юнити редактировать непосредственно xml? Он же у Вас что-то отображает?
Возьмем пример - атлас текстур. В xml - названия спрайтов, координаты, номер кадра...
1. Импортируем описание атласа. Можно автоматом при закидывании в проект по спецноде.
2. Парсим xml. По результатам находим собственно текстуру атласа и создаем спрайты.
3. Открываем редактор спрайтов (заметьте спрайтов, а не xml!)
4. Редактируем как нам надо. Если охота можно даже создать новую текстуру.
5. Сохраняем результат - текстуру и описание атласа - xml файл.
Имхо - практически никогда не нужен редактор непосредственно xml.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Editor для своего формата файла

Сообщение DDDENISSS 23 дек 2012, 14:33

Мне и не нужно редактировать XML. Я просто не стал вдаваться в подробности, а вы налетели)
Я хочу в xml хранить список некоторых объектов. В обычном скрипте это не получится сделать т.к. сериализация не работает с полиморфизмом. Т.е. такой список List<BaseObject> с разными типами объектов(наследников BaseObject) не сможет сохраниться.
Не знаю может есть какие-то аннотации типа XmlInclude или XmlElement, которые спасут, но в юнити я так понимаю свой сериализатор?
И еще одна причина есть. Я бы хотел иметь возможность потом создавать этот список вне юнити и загружать его даже из интернета.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Editor для своего формата файла

Сообщение Kira 06 июл 2013, 20:50

А меня интересует, как вообще заставить его работать. OnEnable ни разу не запускается. вообщем работает все только если расширение .asset . А стоит что нибудь другое использовать так все (полная Ж) .
Синтаксис:
Используется csharp
[CustomEditor(typeof(Dialog))]
public class DialogEditor : Editor {


    Dialog dialog;
    SerializedProperty d;

    static void CreateEditor()
    {

    }
    void OnEnable()
    {
        dialog = (Dialog)target;
        d = serializedObject.FindProperty("f");
    }
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
   
        GUILayout.Box(dialog.d.TextDlg, GUILayout.ExpandWidth(true));
        GUILayout.Label("  "+d,GUILayout.ExpandWidth(true));
    }
        }
 


[unity 3D] не поддерживает другие форматы, так что не получиться сделать свой инспектор. :ymsigh:
Kira
UNIт
 
Сообщения: 55
Зарегистрирован: 14 ноя 2012, 22:35

Re: Editor для своего формата файла

Сообщение Kira 15 июл 2013, 18:08

Хм :-? Нео все таки как то это сделал, для графов.
Kira
UNIт
 
Сообщения: 55
Зарегистрирован: 14 ноя 2012, 22:35

Re: Editor для своего формата файла

Сообщение seaman 15 июл 2013, 18:54

У него свое окно. Его можно сделать для любого файла. Здесь был вопрос про инспектор. Инспектор только для тех файлов, которые уже знает Юнити (это минус, но это так). Вы можете у всех своих файлов делать расширение asset и уже в инспекторе разбирать что ж это за asset. Ну и соответственно выводить разные инспекторы.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Editor для своего формата файла

Сообщение Neodrop 16 июл 2013, 04:51

Для ассетов тоже можно переопределить инспектор. Я так сделал для .byte файлов. Просто переопределил CustomEditor для TextAssets

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

Re: Editor для своего формата файла

Сообщение seaman 16 июл 2013, 07:57

TextAsset - это тоже один из известных Юнити файлов. У него могут быть расширения - .txt .html .htm .xml .bytes (см. тут) Если файл с таким расширением для него можно переопределить инспектор. А если расширение файла нечто типа .myext ? Для таких файлов приходится делать окно редактора, а не инспектор. Мне во всяком случае не удалось определить инспектор для произвольного расширения.
Также Юнити поддерживает файлы (согласно документации)
звук - .aif, .wav, .mp3, and .ogg .xm, .mod, .it .s3m
модели - .FBX .OBJ .Max .Blend .dxf .dae .MB, .MA .c4d .lxo .lwo .jas
шрифты - .ttf .dfont
видео - .mov, .mpg, .mpeg, .mp4, .avi, .asf
текстуры - .PSD .TIFF .jpg .png .TGA .gif .BMP .IFF .PICT .DDS
тексты - .txt .html .htm .xml .bytes
шейдер - .shader
Вроде все. Если что-то упустил - дополните. Для всех этих файлов можно переопределить инспектор.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Editor для своего формата файла

Сообщение Neodrop 16 июл 2013, 12:07

Упустил. Напиши простейший скрипт и получи тип объекта в Selection, выделив свой файл ".myext"
Вот этот тип и нужно будет переопределить.

P.S. Тип файла для незарегистрированных типов : UnityEngine.Object

Синтаксис:
Используется csharp
    [MenuItem("Assets/Editor GUI/Print file ext")]
    static void GetExt()
    {
        string path = AssetDatabase.GetAssetPath(Selection.activeObject);
        path = path.Substring(path.LastIndexOf("/")+1);
        Debug.LogWarning(string.Format("File type : {0}, File name : {1}", Selection.activeObject.GetType(), path));
    }
 
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Editor для своего формата файла

Сообщение seaman 16 июл 2013, 15:27

Ого, работает. Круто. Правда, чтобы получить содержимое файла приходится использовать FileStream. Т.к. target в Editor тоже типа Object и как из него получить содержимое я не понял (в TextAsset, естественно не кастуется).
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Editor для своего формата файла

Сообщение Neodrop 16 июл 2013, 17:03

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

Re: Editor для своего формата файла

Сообщение Kira 19 июл 2013, 20:51

Selection.activeObject :-bd
Kira
UNIт
 
Сообщения: 55
Зарегистрирован: 14 ноя 2012, 22:35


Вернуться в Editor

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

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