[Unity工具]批量修改Texture

BatchModifyTexture.cs

 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEditor;
 4 using System.IO;
 5 
 6 public class BatchModifyTexture {
 7 
 8     [MenuItem("Assets/BatchModifyTexture")]
 9     static void Init()
10     {
11         //获取Project视图中的选中目录下的所有图片
12         Object[] objects = Selection.GetFiltered(typeof(Object), SelectionMode.Unfiltered);
13         string dir = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/")) + "/" + AssetDatabase.GetAssetPath(objects[0]);
14         //Debug.LogError(dir);
15         string[] paths = Directory.GetFiles(dir, "*.png", SearchOption.AllDirectories);
16 
17         //创建存放目录
18         string saveDir = Application.dataPath + "/BatchModifyTexture";
19         if (!Directory.Exists(saveDir))
20         {
21             Directory.CreateDirectory(saveDir);
22         }
23 
24         //图片处理
25         for (int i = 0; i < paths.Length; i++)
26         {
27             string path = paths[i];
28             string assetPath = path.Substring(path.IndexOf("Assets/"));
29             string name = assetPath.Substring(assetPath.LastIndexOf("\\") + 1);
30             //Debug.LogWarning(assetPath);
31             //Debug.LogWarning(name);
32 
33             //设置成可读
34             TextureImporter textureImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;
35             textureImporter.textureType = TextureImporterType.Advanced;
36             textureImporter.isReadable = true;
37             AssetDatabase.ImportAsset(assetPath);
38 
39             //图片颜色变亮
40             Texture2D tex = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
41             Color[] colors = tex.GetPixels(0, 0, tex.width, tex.height);
42             Texture2D texTemp = new Texture2D(tex.width, tex.height);
43             Color[] colorsTemp = new Color[colors.Length];
44 
45             for (int j = 0; j < colors.Length; j++)
46             {
47                 colorsTemp[j] = colors[j] * 2f;
48             }
49             texTemp.SetPixels(0, 0, tex.width, tex.height, colorsTemp);
50             texTemp.Apply();
51             byte[] bytes = texTemp.EncodeToPNG();
52             File.WriteAllBytes(saveDir + "/" + name, bytes);
53         }
54 
55         AssetDatabase.Refresh();
56         Debug.Log("BatchModifyTexture Finish");
57     }
58 }

猜你喜欢

转载自www.cnblogs.com/lyh916/p/9092099.html