如何解决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无法应用我的新资产预设,为什么我无法访问代码中屏幕截图中详细说明的属性?
"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 举报,一经查实,本站将立刻删除。