只是简单的把图片的maxTextureSize设置成它本身的最大值还大的下一个
using BehaviorDesigner.Runtime.Tasks.Unity.UnityBoxCollider;
using DG.Tweening.Plugins.Core.PathCore;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using UnityEditor;
public class PictureCompress: Editor
{
[MenuItem("UITools/选中的文件内图片压缩")]
static void PictureCompressFunc()
{
string[] assetGUIDArray = Selection.assetGUIDs;
string assetPath = AssetDatabase.GUIDToAssetPath(assetGUIDArray[0]);
string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";
string[] ImageType = imgtype.Split('|');
for (int i = 0; i < ImageType.Length; i++)
{
string[] dirs = Directory.GetFiles(assetPath, ImageType[i], SearchOption.AllDirectories);
for (int j = 0; j < dirs.Length; j++)
{
var path = dirs[j];
TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;
int width = 0;
int height = 0;
GetTextureOriginalSize(textureImporter, out width, out height);
if (width > textureImporter.maxTextureSize || height > textureImporter.maxTextureSize)
{
continue;
}
else
{
SetSize(width, height, textureImporter);
}
}
}
MyLog.DevLog("执行完毕!");
}
private static void SetSize(int width, int height, TextureImporter textureImporter)
{
int max = width > height ? width : height;
int[] size_r = { 32, 64, 128, 256, 512, 1024, 2048 };
TextureImporterPlatformSettings settingAndroid = textureImporter.GetPlatformTextureSettings("Android");
settingAndroid.overridden = true;
if (settingAndroid.maxTextureSize < max)
return;
for (int i = 0; i < size_r.Length; i++)
{
if (size_r[i] > max)
{
settingAndroid.maxTextureSize = size_r[i];
//MyLog.DevLog("settingAndroid.maxTextureSize11111111", settingAndroid.maxTextureSize);
textureImporter.SetPlatformTextureSettings(settingAndroid);
return;
}
}
settingAndroid.maxTextureSize = size_r[size_r.Length - 1];
textureImporter.SetPlatformTextureSettings(settingAndroid);
//MyLog.DevLog("settingAndroid.maxTextureSize2222222", settingAndroid.maxTextureSize);
}
public static void GetTextureOriginalSize(TextureImporter ti, out int width, out int height)
{
if (ti == null)
{
width = 0;
height = 0;
return;
}
object[] args = new object[2] { 0, 0 };
MethodInfo mi = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);
mi.Invoke(ti, args);
width = (int)args[0];
height = (int)args[1];
}
}