forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

seaman 25.01.2013 00:28

Ответ: Вопросы от новичка
 
Цитата:

А сделать загрузчик для своего формата нельзя?
Можно, конечно:
AssetPostprocessor.OnPostprocessAllAssets
ЗЫ: плохо, что инспектор для своих объектов делать нельзя :(
Вот например импорт xml описания атласа шрифта:
Код:

using UnityEditor;
using UnityEngine;

public class XMLpostprocessor : AssetPostprocessor
{

    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        foreach (string i in importedAssets)
        {
            if (i.EndsWith(".xml"))
            {
                Debug.Log("xml file impored " + i);
                FontImport.ImportFont(i);
            }
        }
    }
}

Собственно импорт осуществляет класс FontImport, а это для автоматизации импорта.

WISHMASTER35 25.01.2013 00:41

Ответ: Вопросы от новичка
 
Цитата:

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

Цитата:

Вообще тут все четко и прозрачно. "Пустышка" - это сам ассет.
Ну в принципе да, просто не привычно(и не удобно) т.к. GameObject устроен по другому.

Цитата:

Записываешь этот список в тот же ассет с четко заданным постоянным именем.
Я имел ввиду как получить список объектов ассета не создавая своего списка. Впрочем пока мне это только ради интереса.

Цитата:

AssetPostprocessor.OnPostprocessAllAssets
Надеюсь получится сделать. А редактор тогда в отдельном окне сделаю.

Цитата:

ЗЫ: плохо, что инспектор для своих объектов делать нельзя
Ага. Я когда-то в злых робатах копался. Там есть такой интересный класс SignalSender, который вызывает методы в указанных скриптах. Имена методов нужно было вручную вводить, что довольно опасно т.к. одной буквой ошибись и черт заметишь эту ошибку. Вот для него так хотелось сделать инспектор, чтобы можно было удобно выбирать объект\скрипт\метод, который нужно вызвать.
Pax говорил, что в 4 версии уже можно так делать.

seaman 25.01.2013 00:53

Ответ: Вопросы от новичка
 
Цитата:

Pax говорил, что в 4 версии уже можно так делать.
Цитата:

С четверкой не работал, поэтому не знаю
нельзя. Единственное что приходит в голову - сделать расширение своего файла txt. И:
Код:

[CustomEditor(typeof(TextAsset))]
public class GobInspector : Editor
{
    public override void OnInspectorGUI()
        {
        GUILayout.Label("This is a Label in a Custom Editor");
        }
}

Ну а внутри разбирать - Ваш ли это файл или нет.
Хотя может я на ночь глядя туплю.

pax 25.01.2013 01:07

Ответ: Вопросы от новичка
 
да, примерно так я и предлагал, так я делал для Antares Universe

WISHMASTER35 25.01.2013 01:17

Ответ: Вопросы от новичка
 
seaman, определить мой ли файл несложно. Но если файл не мой, то не знаю как переключится на следующий TextAsset редактор или на дефолтный.
Если в проекте будет несколько таких TextAsset редакторов, то работать будет только один.

Не понял о чем ты говорил, что нельзя.

seaman 25.01.2013 01:39

Ответ: Вопросы от новичка
 
Вообще для этого есть DrawDefaultInspector(); Но тут он не помогает. Не показывается текст обычного текстового файла после своего инспектора.
Цитата:

Не понял о чем ты говорил, что нельзя.
О том, что и в 4-ке нельзя.

seaman 25.01.2013 01:57

Ответ: Вопросы от новичка
 
Интересно, что инспектор текстуры расширить не так просто.
[CustomEditor(typeof(Texture))]не работает
Работает так:
[CustomEditor(typeof(TextureImporter))]
Но при этом инспектор, естественно, выглядит совершенно не стандартно.

WISHMASTER35 25.01.2013 02:01

Ответ: Вопросы от новичка
 
Вот это сообщение в котором pax писал, что в 4й версии уже можно делать инспектор для поля.
Цитата:

Сообщение от pax (Сообщение 237565)
В четверке появились класс PropertyDrawer и атрибут CustomPropertyDrawer для этих целей. А так же PropertyAttribute для модификации отображения конкретных свойств, например задать Range для чисел.

seaman, не пойму как через AssetPostprocessor.OnPostprocessAllAssets загрузить свой формат?
В документации лишь вывод в консоль написали http://docs.unity3d.com/Documentatio...AllAssets.html

pax 25.01.2013 02:04

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 250628)
Вот это сообщение в котором pax писал, что в 4й версии уже можно делать инспектор для поля.

Хорошо что напомнил, надо попробовать

WISHMASTER35 25.01.2013 02:09

Ответ: Вопросы от новичка
 
Текстура импортируется этим классом http://docs.unity3d.com/Documentatio...tImporter.html
Спасибо рефракторингу. Может и свой формат так же можно загрузить.
Я не знаю как с программированием редактора дела обстоят в UDK и CRYENGINE, но расширяемость юнити ограничивается фактически возможностью создания своего инспектора.
UPDATE
Погуглив на тему AssetImporter мне кажется, что поддержку своего формата не сделаешь.
А метод который возвращает AssetImporter для файла AssetImporter.GetAtPath наверно работает фиксировано и кастомизации не подлежит. Странно, но его пометили как extern и вынесли куда-то реализацию.

seaman 25.01.2013 10:06

Ответ: Вопросы от новичка
 
Цитата:

Текстура импортируется этим классом http://docs.unity3d.com/Documentatio...tImporter.html
Не этим. Я же написал - TextureImporter
В Юнити куча классов наследующих AssetImporter. Точно так же ты можешь наследовать AssetImporter и сделать свой импортер своего файла. Но если AssetImporter.GetAtPath работает неверно (нужно проверить) то лучше делать как я написал - переопределять AssetPostprocessor.

seaman 25.01.2013 11:58

Ответ: Вопросы от новичка
 
Посмотрел я все это. Ну неудобно расширять инспектор. Для своих объектов нельзя делать без жуткого геморроя. Если переделывать существующие то вывести стандартный без геморроя тоже не получится. OnPreviewGUI до сих пор не работает.
Единственное для чего он нормально работает - настройка своих компонентов (скриптов наследованных от монобех и повешенных на ГО). Для всего остального значительно проще писать свое окно редактора.

pax 25.01.2013 12:19

Ответ: Вопросы от новичка
 
ScriptableObject + CustomEditor попробовал?

seaman 25.01.2013 13:53

Ответ: Вопросы от новичка
 
Цитата:

ScriptableObject + CustomEditor попробовал?
Не, ну это то работает. Создаем ScriptableObject, создаем из него ассет. смотрим инспектор для него. Видим и свои добавки и дефолтный, если надо. Все ОК.
Хотелось несколько иного. Например есть 3ds файл. Хотелось бы для него написать инспектор аналогичный инспектору fbx файла. (Это чисто пример, но понятно что хочется).
Сейчас нужно или из контекстного меню или из меню сверху запускать импортер такого файла, открывать в импортере отдельное окно с настройками импорта...

pax 25.01.2013 15:35

Ответ: Вопросы от новичка
 
да, так я импортер b3d писал ага, тоже бы хотелось, но к сожалению не нашел как сделать


Часовой пояс GMT +4, время: 13:24.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot