Как избежать двух файлов в представлении проекта при создании пользовательского импортера в Unity3D?

ПРИМЕЧАНИЕ. Я использую более широкую сеть, чем ответы Unity, мой исходный вопрос можно найти на здесь.

Я создал импортер ProTools CueSheet. Он использует OnPostprocessAllAssets() для обнаружения файлов в проекте с расширением .cuesheet. Затем он запускает эти файлы cuesheet через мой синтаксический анализатор. Это создает объект ScriptableObject, который затем превращается в актив через Database.CreateAsset().

Проблема в том, что у меня остаются два файла: исходная таблица и вновь созданный актив. Можно ли каким-либо образом сгенерировать актив таким образом, чтобы исходная справочная таблица действовала как актив, так же, как текстуры или файлы FBX?

public class CueSheetPostProcessor : AssetPostprocessor {
    static string extension = ".cuesheet";

    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
        foreach (string assetPath in importedAssets) {
            if (assetPath.EndsWith(extension, StringComparison.OrdinalIgnoreCase)) {
                string newPath = assetPath + ".asset";
                Session session = CueImporter.Load(assetPath);
                AssetDatabase.CreateAsset(session, newPath);
                AssetDatabase.SaveAssets();
            }
        }
    }
}

person Soviut    schedule 27.04.2015    source источник
comment
Я подозреваю, что это невозможно, но я не уверен на 99%. Иметь два файла одновременно может быть неудобно, но есть ли серьезные недостатки?   -  person Max Yankov    schedule 27.04.2015
comment
@golergka Это путает, что является активом, а что является исходным файлом. Множество основных типов, таких как FBX, WAV, MP3 и т. Д., Конвертируются на месте. Например, рядом с FBX нет актива. Есть очень небольшая документация по поводу того, что они называются представлениями. Я пытаюсь определить, возможно ли это с пользовательскими форматами, но я не могу оправдать загрузку импортеров на сотни долларов в Unity Asset Store, чтобы покопаться в их источниках, просто чтобы узнать.   -  person Soviut    schedule 27.04.2015
comment
Когда Unity импортирует активы, он создает файл, который фактически использует, в папке библиотеки проекта. Если вы посмотрите на файлы .meta, которые принадлежат, например, к WAV (установите его в текстовом формате в настройках проекта, если он отображается в двоичном формате), вы найдете там guid, и вы найдете файл с именем guid в Папка библиотеки. Может быть, вы можете сделать то же самое со своим импортером?   -  person itchee    schedule 17.05.2015
comment
Насколько мне известно, папка библиотеки - это просто кеш проекта. Здесь хранятся оптимизированные версии файлов wav или png. Разработчики не могут управлять папкой библиотеки; Unity полностью справляется с этим.   -  person Soviut    schedule 17.05.2015


Ответы (2)


Я бы создал PropertyDrawer для Serializable класса CueSheet, чтобы он принимал .cueSheet TextAsset или путь к файлу .cueSheet, и создал бы экземпляр класса CueSheet и назначил его или изменил.

person Sri Krishna Paritala    schedule 10.06.2015
comment
Звучит многообещающе. Можете ли вы порекомендовать для этого какие-нибудь ссылки? - person Soviut; 10.06.2015
comment
Я изучил это, и это действительно просто улучшение инспектора. Действительно ли Unity обрабатывает импорт файлов FBX, аудио и текстур именно так? - person Soviut; 18.06.2015
comment
Я не знаю, работает ли это так же, как в Unity, но он может дать вам поведение, подобное префабу, аналогичному префабу Unity. - person Sri Krishna Paritala; 18.06.2015

Пробовали ли вы вместо создания нового актива использовать AssetDatabase.AddObjectToAsset? Файл в Assets может «содержать» несколько активов и несколько типов активов. При импорте .fbx в инспекторе проекта выводятся несколько вещей: дерево GameObject (т.е. префаб), некоторые модели, возможно, установка и так далее. Все это «содержится» в обработанном .fbx

person Paul Du Bois    schedule 02.08.2017