在 Unity3D 中创建自定义导入器时如何避免项目视图中有两个文件?

Posted

技术标签:

【中文标题】在 Unity3D 中创建自定义导入器时如何避免项目视图中有两个文件?【英文标题】:How to avoid two files in project view when creating a custom importer in Unity3D? 【发布时间】:2015-04-27 04:21:30 【问题描述】:

注意:我的网络比 Unity Answers 更广泛,我的原始问题可以在 here 找到。

我创建了一个 ProTools CueSheet 导入器。它使用OnPostprocessAllAssets() 来检测项目中具有.cuesheet 扩展名的文件。然后它通过我的解析器运行这些 cuesheet 文件。这会生成一个 ScriptableObject,然后通过Database.CreateAsset() 将其转换为资产。

问题是,这给我留下了两个文件,原始的 cuesheet 和新生成的资产。有什么方法可以生成资源,例如原始 cuesheet 充当资源,就像纹理或 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();
            
        
    

【问题讨论】:

我怀疑这是不可能的,但我不是 99% 确定。同时拥有两个文件可能不方便,但有什么主要缺点吗? @golergka 它混淆了什么是资产和什么是源文件。 FBX、WAV、MP3等大量核心类型都进行了原地转换。例如,FBX 旁边没有资产。有一些关于这些被称为“表示”的非常少量的文档。我正在尝试确定自定义格式是否可行,但我无法证明在 Unity Asset Store 上下载价值数百美元的进口商来挖掘其来源只是为了找出答案。 Unity 导入 Assets 时,会在项目下的 Library 文件夹中创建它实际使用的文件。如果您查看属于例如 WAV 的 .meta 文件(如果它以二进制形式显示,请将其设置为项目设置中的文本),您会在那里找到一个 guid,并且您会找到一个名为 guid 的文件库文件夹。也许你可以对你的进口商做同样的事情? 据我所知,Library 文件夹只是项目的缓存。这是存储 wav 或 png 的优化版本的地方。开发人员无法控制 Library 文件夹; Unity 完全管理它。 【参考方案1】:

我将为SerializableCueSheet 创建一个PropertyDrawer,以便它接受.cueSheet TextAsset.cueSheet 文件的路径并创建CueSheet 类的实例并分配或修改它。

【讨论】:

这听起来很有希望。你有什么可以推荐的参考资料吗? 我已经对此进行了研究,它实际上只是一个检查器增强功能。这实际上是 Unity 处理导入 FBX 文件、音频和纹理的方式吗? 不知道是不是和unity处理的方式一样,但是可以给你prefab的行为,类似于unity的prefab。【参考方案2】:

您是否尝试过使用 AssetDatabase.AddObjectToAsset 而不是创建新资产? Assets 中的文件可以“保存”多个资产和多种资产类型。导入 .fbx 时,项目检查器中的输出是几样东西:游戏对象树(即预制件)、一些模型,可能还有装备等等。所有这些都“包含”在处理后的 .fbx 中

【讨论】:

以上是关于在 Unity3D 中创建自定义导入器时如何避免项目视图中有两个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中创建自定义导航抽屉

如何在 laravel 中创建自定义关系?

如何在 QML 中创建自定义对象?

如何在 Facebook SDK 中创建自定义分享按钮

在 Xcode 中创建自定义 xib 视图大小

如何在 WordPress 中创建自定义表单?