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

30

注意: 我正在扩大范围以涵盖Unity Answers之外的内容,我原始问题的链接在这里

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

问题是,这会让我得到两个文件,原始cue sheet和新生成的资源。是否有任何方法可以以这样的方式生成资源,即原始cue sheet像纹理或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();
            }
        }
    }
}

我怀疑这是不可能的,但我不能百分之九十九确定。同时打开两个文件可能会有些不方便,但是否存在任何主要缺点呢? - Max Yankov
4
@golergka的内容有点混淆了什么是资产和什么是源文件。许多核心类型,如FBX、WAV、MP3等都会被就地转换。例如,旁边没有一个资产与一个FBX相关联。有一些非常轻微的文档称这些为“表示形式”。我正在尝试确定是否可以使用自定义格式,但我无法证明下载数百美元的导入器来挖掘它们的源代码只是为了找出答案。 - Soviut
2
当Unity导入资源时,它会在项目下的Library文件夹中创建实际使用的文件。如果您查看属于WAV文件的.meta文件(如果它显示为二进制文件,请在项目设置中将其设置为文本格式),您会发现其中有一个GUID,并且您会在Library文件夹中找到一个以GUID命名的文件。也许您的导入程序可以做同样的事情? - itchee
据我所知,Library文件夹只是项目的缓存。这是优化版本的wav或png存储的地方。开发人员无法控制Library文件夹;Unity完全管理它。 - Soviut
2个回答

1
我会为可序列化类CueSheet创建一个PropertyDrawer,使其接受.cueSheet TextAsset或.cueSheet文件的路径,并创建CueSheet类的实例并分配或修改它。

这听起来很有前途。你能推荐一些相关的参考资料吗? - Soviut
我已经调查过了,这只是一个检查器增强功能。这是否是Unity处理导入FBX文件、音频和纹理的实际方式? - Soviut
我不知道它是否与Unity处理方式相同,但它可以给你类似于Unity预制件的行为。 - Sri Krishna Paritala

0
你是否尝试过使用AssetDatabase.AddObjectToAsset而不是创建新的资源?Assets中的文件可以“容纳”多个资源和多种类型的资源。当导入.fbx文件时,项目检查器中的输出包括:一个GameObject树(即预制件)、一些模型、可能还有一个骨骼等等。所有这些都被“包含”在处理后的.fbx文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接