using System.IO;
using System.Reflection;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
[CustomEditor(typeof(TextureImporter))]
public class ImageImport : AssetPostprocessor
{
//--导入贴图前
public void OnPreprocessTexture()
{
TextureImporter importer = assetImporter as TextureImporter;
ChangeTextureImportFormat(importer, assetPath);
}
static int[] formatSize = new int[] { 32, 64, 128, 256, 512, 1024, 2048, 4096 };
static int FitSize(int picValue)
{
foreach (var one in formatSize)
{
if (picValue <= one)
{
return one;
}
}
return 1024;
}
//贴图不存在、meta文件不存在、图片尺寸发生修改需要重新导入
static bool IsFirstImport(TextureImporter importer, string assetPath)
{
(int width, int height) = GetTextureImporterSize(importer);
Texture tex = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
bool hasMeta = File.Exists(AssetDatabase.GetAssetPathFromTextMetaFilePath(assetPath));
return tex == null || !hasMeta || (tex.width != width && tex.height != height);
}
//获取导入图片的宽高
static (int, int) GetTextureImporterSize(TextureImporter importer)
{
if (importer != null)
{
object[] args = new object[2];
MethodInfo mi = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);
mi.Invoke(importer, args);
return ((int)args[0], (int)args[1]);
}
return (0, 0);
}
static Object targetObj;
//[MenuItem("Tools/TextureEdit")]
static void EditTexture()
{
Object[] objs = Selection.GetFiltered(typeof(Texture), SelectionMode.DeepAssets);
foreach (Object obj in objs)
{
string path = AssetDatabase.GetAssetPath(obj);
if (obj.GetType() == typeof(Texture2D) && path.Contains(".png") == true)
{
TextureImporter texture = AssetImporter.GetAtPath(path) as TextureImporter;
ChangeTextureImportFormat(texture, path);
AssetDatabase.ImportAsset(path);
}
}
}
public static void ChangeTextureImportFormat(TextureImporter importer, string assetPath)
{
//try
//{
// if (importer != null && !assetPath.EndsWith("_Normal.png") && !assetPath.EndsWith("_Normal.bmp") && !assetPath.EndsWith("_Normal.tga"))
// {
// //if (IsFirstImport(importer, assetPath))
// //{
// importer.textureType = TextureImporterType.Sprite;
// importer.spritePixelsPerUnit = 1;
// importer.spriteImportMode = SpriteImportMode.Single;
// int textureSize = Mathf.Max(4096, 4096);
// int SizeType = FitSize(textureSize);
// ////Standalone
// TextureImporterPlatformSettings settings = importer.GetPlatformTextureSettings("Standalone");
// settings.overridden = true;
// settings.maxTextureSize = SizeType;
// settings.format = importer.DoesSourceTextureHaveAlpha() ? TextureImporterFormat.DXT5 : TextureImporterFormat.DXT5Crunched;
// importer.SetPlatformTextureSettings(settings);
// settings = importer.GetPlatformTextureSettings("iPhone");
// settings.overridden = true;
// settings.maxTextureSize = SizeType;
// settings.format = importer.DoesSourceTextureHaveAlpha() ? TextureImporterFormat.ASTC_4x4 : TextureImporterFormat.ASTC_6x6;
// importer.SetPlatformTextureSettings(settings);
// settings = importer.GetPlatformTextureSettings("Android");
// importer.spritePixelsPerUnit = 1;
// settings.overridden = true;
// settings.maxTextureSize = SizeType;
// settings.format = importer.DoesSourceTextureHaveAlpha() ? TextureImporterFormat.ASTC_4x4 : TextureImporterFormat.ASTC_6x6;
// importer.SetPlatformTextureSettings(settings);
// //}
// }
//}
//catch (System.Exception e)
//{
//}
}
}