问题背景
现在还有很多模型资源使用DDS格式的贴图,这种格式在Unity打iOS包的时候会提示错误,所以需要将DDS格式转换为其他格式。但是面对大量的材质需要替换时,不仅很累,而且很容易出错。
一、转换格式
转换格式有很多软件可以做到,推荐一款很好用的图片格式转换软件 Xnconvert(点击下载)。
在Unity工程Asset目录下使用资源管理器搜索功能搜索“.dds”,按文件类型排序,效果如下;
讯享网选中所有搜出来的.dds贴图文件,拖到XnConvert的输入文件区域:
然后切换到输出界面,修改一下输出格式,使转换后的.png格式的图片和原来的dds文件处在同一目录下,方便我们在脚本中替换材质的贴图。


二、脚本修改材质主要贴图
新建任意名称脚本,将以下代码放在新建脚本中。在Unity的project视图点击选中资源根目录(Asset文件夹),然后在工具栏中点击Assets/一键替换DDS的贴图。
[MenuItem("Assets/一键替换DDS的贴图")] public static void ToChangeMaterialsDDS() {
//获取选中目录下的所有Material类型文件对象 UnityEngine.Object[] m_objects = Selection.GetFiltered(typeof(Material), SelectionMode.DeepAssets);//选择的所有对象 //遍历所有材质 foreach (UnityEngine.Object item in m_objects) {
if (Path.GetExtension(AssetDatabase.GetAssetPath(item)) != "")//判断路径是否为空 {
string path = AssetDatabase.GetAssetPath(item); string oldTextruePath = AssetDatabase.GetAssetPath(((Material)item).mainTexture); //判断材质的mainTexture是否为.dds格式 if (AssetDatabase.GetAssetPath(((Material)item).mainTexture).Contains(".dds")) {
//如果为.dds格式,获取其同名.png文件路径 string newTextruePath = AssetDatabase.GetAssetPath(((Material)item).mainTexture).Replace(".dds", ".png"); if (Path.GetExtension(newTextruePath) != "")//判断同目录下是否有同名.png文件 {
//则将材质的mainTexture改为转换好的同目录下的.png格式贴图,编辑器模式下使用AssetDatabase.LoadAssetAtPath读取资源 ((Material)item).mainTexture = AssetDatabase.LoadAssetAtPath<Texture>(newTextruePath); //替换成功后删除.dds格式的贴图文件 AssetDatabase.DeleteAsset(oldTextruePath); Debug.Log(AssetDatabase.GetAssetPath(item) + "TextureName=" + AssetDatabase.GetAssetPath(((Material)item).mainTexture)); } } } } //保存并刷新资源 AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
讯享网
稍等片刻,即可看到所有dds图片都已经不见了,可以进行iOS打包了!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70246.html