最近项目工期紧,所以更新少了,不过我遇到一些问题,当我的UI/序列帧过多的时候,我需要去选中UI转换成Sprite,而且用shift选中的时候,文件夹中上百个文件,中间混进一个其他格式的文件我还得一个一个找出来,太麻烦了,我们是程序员,程序员就是用代码的方式解决问题,我想到了用代码批量转换,并且限制最大分辨率,开启压缩,代码如下:
public class ScanAndConvertTextures : EditorWindow
{
[MenuItem("工具/UI转换工具")]
private static void ShowWindow()
{
GetWindow(typeof(ScanAndConvertTextures));
}
private void OnGUI()
{
GUILayout.Label("将图片批量转换的工具,自动将02_UI下的png和jpg格式的图片转换为Sprite,并且分辨率改为1024", EditorStyles.boldLabel);
if (GUILayout.Button("开始转换"))
{
ConvertTextures();
}
}
private void ConvertTextures()
{
string folderPath = "Assets/02_UI"; // 修改为你想要扫描的文件夹路径
string[] files = AssetDatabase.FindAssets("t:Texture2D", new[] { folderPath });
foreach (var file in files)
{
string path = AssetDatabase.GUIDToAssetPath(file);
TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter;
if (importer != null && (System.IO.Path.GetExtension(path) == ".png" || System.IO.Path.GetExtension(path) == ".jpg"))
{
if (importer.textureType != TextureImporterType.Sprite)
{
importer.textureType = TextureImporterType.Sprite;
importer.spriteImportMode = SpriteImportMode.Single;
TextureImporterSettings textureSettings = new TextureImporterSettings();
importer.ReadTextureSettings(textureSettings);
textureSettings.maxTextureSize = 1024;
textureSettings.compressionQuality = (int)TextureCompressionQuality.Normal;
importer.crunchedCompression = true;
importer.SetTextureSettings(textureSettings);
importer.SaveAndReimport();
CrunchTexture(path);
}
}
}
Debug.Log("转换成功");
}
private void CrunchTexture(string path)
{
var texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
if (texture != null)
{
EditorUtility.CompressTexture(texture, TextureFormat.RGBA32, TextureCompressionQuality.Normal);
}
}
}
该脚本会在unity上方的工具栏中生成一项选择,像这样:
不过要注意:1、这个脚本只转换.png或者.jpg格式的图片(当然,你可以自己改)
2、这个脚本会忽略已经转换过Sprite的图片