微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity C#使用带有预设的AssetImporter以编程方式修改资产导入设置

如何解决Unity C#使用带有预设的AssetImporter以编程方式修改资产导入设置

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

我创建了一个编辑器窗口,单击该按钮可以在将代码实施到主项目之前对其进行测试。

按钮单击事件:

write.csv()

如您所见,我创建了一个空白音频剪辑,用于在其中模拟预设。 然后,我使用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); } } 返回的路径加载目标资产的AssetImporter,该路径返回我的资产的路径,例如:FindAssetByType

debug.log返回False,即应用失败。

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

AssetImporter variable

为什么AssetImporter无法应用我的新资产预设,为什么我无法访问代码中屏幕截图中详细说明的属性

"Assets/Audio/myaudiofile.mp3"

我还尝试修改'AssetImporter' does not contain a deFinition for 'defaultSampleSettings' 以返回FindAssetsByType返回的对象,如下所示:

AssetDatabase

这将导致T currentAsset = AssetDatabase.LoadAssetAtPath<T>(currentPath); 返回true,但是永远不会应用该预设。 您可以在下面看到此代码被注释掉

这是我搜索资产的方式:

Debug.Log

肯定有一种方法可以做到这一点吗?任何帮助将不胜感激!

解决方法

好吧,AssetImporter class没有名为“ defaultSampleSettings”的属性,因为AssetImporter类只是所有资产导入者的基类。如您在屏幕快照中看到的,实际的类是"UnityEngine.AudioImporter"。因此,您只需要向下转换您的资产导入程序即可访问此属性。

在对导入器进行一些更改后,别忘了致电SaveAndReimport

请注意,将自定义设置应用于资产导入程序通常是通过AssetPostProcessor完成的。虽然我认为如果您调用SaveAndReimport

,您的方法也应该可以正常工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。