【问题标题】:Unity C# programmatically modify asset import settings using AssetImporter with PresetsUnity C# 使用带有预设的 AssetImporter 以编程方式修改资产导入设置
【发布时间】:2020-09-15 23:06:59
【问题描述】:

我正在构建一个自定义资产导入器,它从 JSON 文件中读取资产设置,然后将这些设置应用于 Unity 项目中的资产。我需要将这些设置应用于一系列资产。

我创建了一个编辑器窗口,点击按钮来测试我的代码,然后再将其实施到主项目中。

按钮点击事件:

private void ButtonClick()
    {
        string path = "Assets\\Audio";

        var assetPaths = HelperFunctions.FindAssetsByType<AudioClip>(path, false);

        for (int i = 0; i < assetPaths.Count; i++)
        {
            AudioClip audioClip = AudioClip.Create("", 128, 2, 8000, false);

            Preset preset = new Preset(audioClip);

            var importer = AssetImporter.GetAtPath(assetPaths[i]);

            bool result = preset.ApplyTo(importer);

            Debug.Log(result);
        }
    }

如您所见,我创建了一个空白音频剪辑,用于对预设进行建模。 然后,我使用 FindAssetByType 返回的路径为目标资产加载 AssetImporter,该路径返回我的资产路径,例如:"Assets/Audio/myaudiofile.mp3"

debug.log返回False,即申请失败。

我也无法以编程方式访问 AssetImporter 的某些属性,如下所示:

为什么 AssetImporter 无法应用我的新资产预设,为什么我无法访问代码截图中详述的属性?

'AssetImporter' does not contain a definition for 'defaultSampleSettings'

我也试过修改FindAssetsByType返回AssetDatabase返回的对象,如下:

T currentAsset = AssetDatabase.LoadAssetAtPath<T>(currentPath);

这会导致 Debug.Log 返回 true,但不会应用预设。 你可以在下面看到这段代码被注释掉了

这是我搜索资产的方式:

public static /*List<T>*/ List<string> FindAssetsByType<T>(string path) where T : UnityEngine.Object
    {
        List<string> assets = new List<string>();
        //List<T> assets = new List<T>();

        string searchString = string.Format("t:{0}", typeof(T));
        searchString = searchString.Replace("UnityEngine.", "");

        string[] guids = AssetDatabase.FindAssets(searchString, new string[] { path });

        List<string> paths = AssetGuidToPath(guids);

        foreach (var currentPath in paths)
        {
            T currentAsset = AssetDatabase.LoadAssetAtPath<T>(currentPath);

            //assets.Add(currentAsset);
            assets.Add(currentPath);
        }

        return assets;
    }

确实需要一种方法来实现这一点吗?任何帮助将不胜感激!

【问题讨论】:

    标签: c# unity3d unity-editor


    【解决方案1】:

    好吧,AssetImporter class 没有名为“defaultSampleSettings”的属性,因为 AssetImporter 类只是所有资产导入器的基类。正如您在屏幕截图中看到的那样,实际课程是"UnityEngine.AudioImporter"。因此,您只需降低资产导入器即可访问此属性。

    在您对导入器应用一些更改后,不要忘记致电SaveAndReimport

    请注意,将自定义设置应用于资产导入器通常使用AssetPostProcessor 完成。虽然我认为如果您调用 SaveAndReimport,您的方法也应该有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2023-04-06
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      相关资源
      最近更新 更多