|
|
- #if UNITY_EDITOR
- using UnityEngine;
- using UnityEditor;
- using System.Linq;
- using System.Collections.Generic;
- using UnityEngine.UI;
- using LuaFramework;
- using System;
- using System.IO;
- using System.Collections;
-
- public class MixTool : MonoBehaviour
- {
-
- static List<string> files = new List<string>();
- static string destDir = "TextureNeedChange/texture/";
- static string cacheEffectFilePath = "TextureNeedChange/EffectPathCache.txt";
- static string cacheModelFilePath = "TextureNeedChange/ModelPathCache.txt";
- static string cacheSceneFilePath = "TextureNeedChange/ScenePathCache.txt";
- static string cacheIconFilePath = "TextureNeedChange/IconPathCache.txt";
- static Dictionary<string,string> cachePaths;
-
- static string[] allPath;
- static long startTimeMs = 0;
- static int startIndex = 0;
- static int count = 0;
-
- static List<string> prefabsPath;
-
- static public string GetCacheFilePath(string textureType)
- {
- string cacheFilePath = "";
- if(textureType == "effect")
- cacheFilePath = cacheEffectFilePath;
- if(textureType == "model")
- cacheFilePath = cacheModelFilePath;
- if(textureType == "scene")
- cacheFilePath = cacheSceneFilePath;
- if(textureType == "icon")
- cacheFilePath = cacheIconFilePath;
-
- return cacheFilePath;
- }
-
- static public void OnReadCachePath(string textureType)
- {
- string cacheFilePath = GetCacheFilePath(textureType);
- if (File.Exists(cacheFilePath))
- {
- cachePaths = new Dictionary<string,string>();
- var infoContent = File.ReadAllLines(cacheFilePath);
- foreach (var item in infoContent)
- {
- var kvParts = item.Split(',');
- cachePaths.Add(kvParts[0], kvParts[1]);
- }
- }
- }
-
- static public void OnWriteCachePath(string textureType)
- {
- string cacheFilePath = GetCacheFilePath(textureType);
- List<string> cacheList = new List<string>();
- foreach (var item in cachePaths)
- {
- cacheList.Add(item.Key+","+item.Value);
- }
- File.WriteAllLines(cacheFilePath, cacheList.ToArray());
- }
-
- static public string GetFileName(string filePath)
- {
- int pos = filePath.LastIndexOf("/");
- string fileName = "";
- if(pos > 0)
- {
- fileName = filePath.Remove(0, pos+1);
- // Debug.Log("fileName = " + fileName);
- }
- return fileName;
- }
-
- static void OnCopyTexture(string textTurePath, string textureType, int maxSize)
- {
- files.Clear();
- FindFileContentWithContain(textTurePath, ".meta", "tga");
- FindFileContentWithContain(textTurePath, ".meta", "png");
- FindFileContentWithContain(textTurePath, ".meta", "jpg");
-
- Dictionary<string, string> resList = new Dictionary<string, string>();
- cachePaths = new Dictionary<string,string>();
-
- for (int z = 0; z < files.Count; z++)
- {
- string filePath = files[z];
- filePath = filePath.Substring(0, filePath.Length - 5);
- filePath = filePath.Replace('\\', '/');
- bool is_tga = false;
- if (filePath.Contains(".tga"))
- {
- is_tga = true;
- }
- Texture2D t = LoadByIO(filePath);
- int curMinSize = t.width;
- if(t.height < curMinSize)
- curMinSize = t.height;
- if (is_tga || curMinSize > maxSize)
- {
- string fileName = GetFileName(filePath);
- string tempPath = GetParmPath(filePath, textureType);
- string parmPath = "/" + tempPath;
- string desFile = destDir + textureType + parmPath + fileName;
- string path = Path.GetDirectoryName(desFile);
- if (!Directory.Exists(path)) Directory.CreateDirectory(path);
-
- if (File.Exists(filePath))
- {
- cachePaths[fileName] = filePath;
- // Debug.Log("filePath = " + filePath);
- // Debug.Log("desFile = " + desFile);
- File.Copy(filePath, desFile, true);
- }
- }
- DestroyImmediate(t);
- }
- OnWriteCachePath(textureType);
- files.Clear();
- EditorUtility.DisplayDialog("提示", "抽取贴图完成", "确定");
- }
-
- static void OnPasteTexture(string textureType)
- {
- OnReadCachePath(textureType);
- foreach (var item in cachePaths)
- {
- string fileName = item.Key;
- string desFilePath = item.Value;
- string tempPath = GetParmPath(desFilePath, textureType);
- string parmPath = "/" + tempPath;
- string curFilePath = destDir + textureType + parmPath + fileName;
- if (File.Exists(curFilePath))
- {
- File.Copy(curFilePath, desFilePath, true);
- }
- }
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- EditorUtility.DisplayDialog("提示", "替换贴图完成", "确定");
- }
-
- public static string GetParmPath(string filePath, string textureType)
- {
- string parmPath = "";
- if (textureType == "model")
- {
- // alphatexture后续要手动排查
- int alpha_name_pos = filePath.LastIndexOf("object/alphatexture");
- int role_name_pos = filePath.LastIndexOf("object/role");
- int pet_name_pos = filePath.LastIndexOf("object/pet");
- int mount_name_pos = filePath.LastIndexOf("object/mount");
- int npc_name_pos = filePath.LastIndexOf("object/npc");
- int boss_name_pos = filePath.LastIndexOf("object/monster/boss");
-
- // Debug.Log("filePath = " + filePath + alpha_name_pos +";" + role_name_pos +";" + pet_name_pos +";" + mount_name_pos +";" + boss_name_pos +";");
- if (alpha_name_pos>0 || role_name_pos>0 || pet_name_pos>0 || mount_name_pos>0 || npc_name_pos>0 || boss_name_pos>0)
- {
- parmPath = "512/";
- }
- else
- {
- parmPath = "256/";
- }
- }
- return parmPath;
- }
-
- public static Texture2D LoadByIO(string path) {
- float time = Time.time;
- FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
- fs.Seek(0, SeekOrigin.Begin);
- byte[] bytes = new byte[fs.Length];
- fs.Read(bytes, 0, (int)fs.Length);
- fs.Close();
- fs.Dispose();
- fs = null;
-
- Texture2D t = new Texture2D(1,1);
- t.LoadImage(bytes);
- return t;
- }
- // [MenuItem("MixTool/DeleteFile _F4", false, 150)]
- // public static void DeleteFile()
- // {
- // String path = AppConst.AppDataPath + "/Assets/LuaFramework/AssetBundleRes/ui/common/comon_delete";
- // var files = Directory.GetFiles(path, "*.png");
- // foreach (var file in files)
- // {
- // string path1 = file.Replace("comon_delete", "texture");
- // if (File.Exists(path1))
- // {
- // Debug.Log(path1);
- // File.Delete(path1);
- // }
- // }
- // EditorUtility.DisplayDialog("提示", "DeleteFile完成", "确定");
- // }
-
- public static void FindFileContentWithContain(string root_path, string extstr, string contain)
- {
- string[] names = Directory.GetFiles(root_path);
- string[] dirs = Directory.GetDirectories(root_path);
- foreach (string filename in names)
- {
- string ext = Path.GetExtension(filename);
- if (ext.Equals(extstr))
- {
- if (filename.Contains(contain))
- {
- files.Add(filename);
- }
- }
- }
- foreach (string dir in dirs)
- {
- FindFileContentWithContain(dir, extstr, contain);
- }
- }
-
-
- [MenuItem("MixTool/OptimizeBatch _F5", false, 151)]
- public static void OptimizeBatchForMenu()
- {
- OptimizeBatch(Selection.activeTransform);
- }
-
- public static void OptimizeBatch(Transform trans)
- {
- if (trans == null)
- return;
-
- Dictionary<string, List<Transform>> imageGroup = new Dictionary<string, List<Transform>>();
- Dictionary<string, List<Transform>> textGroup = new Dictionary<string, List<Transform>>();
- Dictionary<string, List<Transform>> tmpGroup = new Dictionary<string, List<Transform>>();
- List<List<Transform>> sortedImgageGroup = new List<List<Transform>>();
- List<List<Transform>> sortedTextGroup = new List<List<Transform>>();
- List<List<Transform>> sortedTMPGroup = new List<List<Transform>>();
-
- for (int i = 0; i < trans.childCount; i++)
- {
- Transform child = trans.GetChild(i);
- Texture cur_texture = null;
- Image img = child.GetComponent<Image>();
- if (img != null)
- {
- cur_texture = img.mainTexture;
- }
- else
- {
- RawImage rimg = child.GetComponent<RawImage>();
- if (rimg != null)
- cur_texture = rimg.mainTexture;
- }
- if (cur_texture != null)
- {
- string cur_path = AssetDatabase.GetAssetPath(cur_texture);
- TextureImporter importer = AssetImporter.GetAtPath(cur_path) as TextureImporter;
- // Debug.Log("cur_path : " + cur_path + " importer:"+(importer!=null).ToString());
- if (importer != null)
- {
- string atlas = importer.spritePackingTag;
- // Debug.Log("atlas : " + atlas);
- if (atlas != "")
- {
- if (!imageGroup.ContainsKey(atlas))
- {
- List<Transform> list = new List<Transform>();
- sortedImgageGroup.Add(list);
- imageGroup.Add(atlas, list);
- }
- imageGroup[atlas].Add(child);
- }
- }
- }
- else
- {
- Text text = child.GetComponent<Text>();
- if (text != null)
- {
- string fontName = text.font.name;
- //Debug.Log("fontName : " + fontName);
- if (!textGroup.ContainsKey(fontName))
- {
- List<Transform> list = new List<Transform>();
- sortedTextGroup.Add(list);
- textGroup.Add(fontName, list);
- }
- textGroup[fontName].Add(child);
- }
- else
- {
- TMPro.TextMeshProUGUI tmp = child.GetComponent<TMPro.TextMeshProUGUI>();
- if (tmp != null)
- {
- string fontName = tmp.font.name;
- //Debug.Log("fontName : " + fontName);
- if (!tmpGroup.ContainsKey(fontName))
- {
- List<Transform> list = new List<Transform>();
- sortedTMPGroup.Add(list);
- tmpGroup.Add(fontName, list);
- }
- tmpGroup[fontName].Add(child);
- }
- }
- }
- OptimizeBatch(child);
- }
- //同一图集的Image间层级顺序继续保留,不同图集的顺序就按每组第一张的来
- for (int i = sortedImgageGroup.Count - 1; i >= 0; i--)
- {
- List<Transform> children = sortedImgageGroup[i];
- for (int j = children.Count - 1; j >= 0; j--)
- {
- children[j].SetAsFirstSibling();
- }
-
- }
- foreach (var item in sortedTextGroup)
- {
- List<Transform> children = item;
- for (int i = 0; i < children.Count; i++)
- {
- children[i].SetAsLastSibling();
- }
- }
- foreach (var item in sortedTMPGroup)
- {
- List<Transform> children = item;
- for (int i = 0; i < children.Count; i++)
- {
- children[i].SetAsLastSibling();
- }
- }
- }
-
- [MenuItem("MixTool/" + "effect - 抽取特效贴图")]
- static void CopyEffectTexture()
- {
- string textTurePath = "Assets/LuaFramework/AssetBundleRes/scene/effect/texture";
- string textureType = "effect";
- int maxSize = 256;
- OnCopyTexture(textTurePath, textureType, maxSize);
- }
-
- [MenuItem("MixTool/" + "effect - 替换特效贴图")]
- static void PasteEffectTexture()
- {
- OnPasteTexture("effect");
- }
-
- [MenuItem("MixTool/" + "model - 抽取模型贴图")]
- static void CopyModelTexture()
- {
- string textTurePath = "Assets/LuaFramework/AssetBundleRes/scene/object";
- string textureType = "model";
- int maxSize = 256;
- OnCopyTexture(textTurePath, textureType, maxSize);
- }
-
- [MenuItem("MixTool/" + "model - 替换模型贴图")]
- static void PasteModelTexture()
- {
- OnPasteTexture("model");
- }
-
- [MenuItem("MixTool/" + "scene - 抽取场景贴图")]
- static void CopySceneTexture()
- {
- // string textTurePath = "Assets/LuaFramework/AssetBundleRes/scene/terrain";
- string textTurePath = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/1003_new/Textures";
- string textureType = "scene";
- int maxSize = 512;
- OnCopyTexture(textTurePath, textureType, maxSize);
- }
-
- [MenuItem("MixTool/" + "scene - 替换场景贴图")]
- static void PasteSceneTexture()
- {
- OnPasteTexture("scene");
- }
-
-
- [MenuItem("MixTool/" + "scene - 抽取icon贴图")]
- static void CopyIconTexture()
- {
- string textTurePath = "Assets/LuaFramework/AssetBundleRes/icon";
- string textureType = "icon";
- int maxSize = 1024;
- OnCopyTexture(textTurePath, textureType, maxSize);
- }
-
-
-
-
- [MenuItem("MixTool/" + "测试信息 ")]
- static void TestInfo()
- {
- // GameObject[] tempObject;
- // if (Selection.activeGameObject)
- // {
- // tempObject = Selection.gameObjects;
- // for (int i = 0; i < tempObject.Length; i++)
- // {
- // Debug.Log("Object name: " + tempObject[i].name);
- // Debug.Log("Lightmaping Index: " + tempObject[i].GetComponent<MeshRenderer>().lightmapIndex);
- // Debug.Log("Lightmaping Offset: " + tempObject[i].GetComponent<MeshRenderer>().lightmapScaleOffset);
- // }
- // }
-
- string filePath = "object/texture/talisman/res/model_talisman_1003/model/model_talisman_1003_mask.jpg";
- int pos = filePath.LastIndexOf('/');
- string fileName = "";
- if(pos > 0)
- {
- fileName = filePath.Remove(0, pos+1);
- Debug.Log("fileName = " + fileName);
- }
-
-
- }
-
-
- [MenuItem("MixTool/" + "ResetTerrainLayer ")]
- static void ResetTerrainLayer()
- {
- Time.timeScale = 1;
- List<string> prefabsPath = new List<string>();
- string path = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/";
- //string path = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/1001_new/";
- allPath = Directory.GetFiles(path, "*prefab*", SearchOption.AllDirectories);
- EditorApplication.update += EditorUpdateLayer;
- }
-
- public static void EditorUpdateLayer()
- {
- long curTimeMs = GetTimeMs();
- //Debug.Log("curTimeMs = " + curTimeMs);
- if (Math.Abs(curTimeMs - startTimeMs) >= 0.1*1000)
- {
- string filePath = allPath[startIndex];
- if (filePath.EndsWith(".prefab"))
- {
- GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(filePath);
- if (prefab)
- {
- startTimeMs = GetTimeMs();
- //Debug.Log("prefab.name = " + prefab.name + ",prefab.layer = " + prefab.layer);
- if (prefab.layer == 0)
- {
- count++;
- SetSceneObjLayer(prefab, 30);
- AssetDatabase.SaveAssets();
- }
- }
- }
- bool isCancel = EditorUtility.DisplayCancelableProgressBar(string.Format("资源处理中({0}/{1})", startIndex, allPath.Length), filePath, (float)startIndex / (float)allPath.Length);
- startIndex++;
- if (isCancel || startIndex >= allPath.Length)
- {
- AssetDatabase.Refresh();
- AssetDatabase.SaveAssets();
- EditorUtility.ClearProgressBar();
- EditorApplication.update = null;
- Debug.Log("处理完成, 处理数量:"+ count);
- startIndex = 0;
- count = 0;
- }
- }
- }
-
- public static void SetSceneObjLayer(GameObject obj, int layer)
- {
- obj.layer = layer;
- if (obj.transform.childCount <= 0)
- {
- return;
- }
- foreach (Transform child in obj.transform)
- {
- SetSceneObjLayer(child.gameObject, layer);
- }
- }
-
- public static long GetTimeMs()
- {
- long currentTicks = DateTime.Now.Ticks;
- DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0);
- long currentMillis = (currentTicks - dtFrom.Ticks) / 10000;
- return currentMillis;
- }
-
-
- [MenuItem("MixTool/" + "CloseLightData ")]
- static void CloseLightData()
- {
- startIndex = 0;
- count = 0;
- Time.timeScale = 1;
- prefabsPath = new List<string>();
-
- //string path = "Assets/LuaFramework/AssetBundleRes/scene/object";
- //var files = Directory.GetFiles(path, "*prefab*", SearchOption.AllDirectories);
- //foreach (var file in files)
- //{
- // if (file.EndsWith(".prefab"))
- // {
- // prefabsPath.Add(file);
- // }
- //}
-
- //string path = "Assets/LuaFramework/AssetBundleRes/scene/effect/objs";
- //var files = Directory.GetFiles(path, "*prefab*", SearchOption.AllDirectories);
- //foreach (var file in files)
- //{
- // if (file.EndsWith(".prefab"))
- // {
- // prefabsPath.Add(file);
- // }
- //}
-
- string path = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/";
- //string path = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/1001_new";
- var files = Directory.GetFiles(path, "*prefab*", SearchOption.AllDirectories);
- foreach (var file in files)
- {
- if (file.EndsWith(".prefab"))
- {
- prefabsPath.Add(file);
- }
- }
-
- allPath = prefabsPath.ToArray();
-
- EditorApplication.update += EditorUpdateLightData;
- }
-
- public static void EditorUpdateLightData()
- {
- long curTimeMs = GetTimeMs();
- //Debug.Log("curTimeMs = " + curTimeMs);
- if (Math.Abs(curTimeMs - startTimeMs) >= 0.1 * 1000)
- {
- string singlePaht = allPath[startIndex];
- int map_1000_index = singlePaht.LastIndexOf("map/1000");
- if (map_1000_index <= 0 )
- {
- var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(singlePaht);
- if (prefab)
- {
- startTimeMs = GetTimeMs();
- CheckSingPrefab(prefab);
- AssetDatabase.SaveAssets();
- }
- }
-
- bool isCancel = EditorUtility.DisplayCancelableProgressBar(string.Format("资源处理中({0}/{1})", startIndex, allPath.Length), singlePaht, (float)startIndex / (float)allPath.Length);
- startIndex++;
- if (isCancel || startIndex >= allPath.Length)
- {
- AssetDatabase.Refresh();
- AssetDatabase.SaveAssets();
- EditorUtility.ClearProgressBar();
- EditorApplication.update = null;
- Debug.Log("处理完成, 处理数量:" + count);
- startIndex = 0;
- count = 0;
- }
-
- }
- }
-
-
- public static void CheckSingPrefab(GameObject go)
- {
- CheckSingGameObject(go);
- foreach (Transform child in go.transform)
- {
- if (child.childCount > 0)
- {
- CheckSingPrefab(child.gameObject);
- }
- CheckSingGameObject(child.gameObject);
- }
- }
-
- public static void CheckSingGameObject(GameObject go)
- {
- var img = go.GetComponentInChildren<SkinnedMeshRenderer>();
- if (img != null)
- {
- if (img.receiveShadows || img.lightProbeUsage != UnityEngine.Rendering.LightProbeUsage.Off || img.reflectionProbeUsage != UnityEngine.Rendering.ReflectionProbeUsage.Off || img.shadowCastingMode != UnityEngine.Rendering.ShadowCastingMode.Off || img.motionVectorGenerationMode != MotionVectorGenerationMode.ForceNoMotion || img.skinnedMotionVectors == true)
- {
- img.receiveShadows = false;
- img.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
- img.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
- img.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
- img.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
- img.skinnedMotionVectors = false;
- count++;
- }
- }
- else
- {
- var img2 = go.GetComponentInChildren<MeshRenderer>();
- if (img2 != null)
- {
- if (img2.receiveShadows || img2.lightProbeUsage != UnityEngine.Rendering.LightProbeUsage.Off || img2.reflectionProbeUsage != UnityEngine.Rendering.ReflectionProbeUsage.Off || img2.shadowCastingMode != UnityEngine.Rendering.ShadowCastingMode.Off || img2.motionVectorGenerationMode != MotionVectorGenerationMode.ForceNoMotion)
- {
- img2.receiveShadows = false;
- img2.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
- img2.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
- img2.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
- img2.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
- count++;
- }
- }
- }
- }
-
- [MenuItem("MixTool/" + "ResetAlphaMaterial-1001 ")]
- public static void ResetAlphaMaterial()
- {
- Dictionary<string, string> path = new Dictionary<string, string>();
- path.Add("special/XSCCZ_CWJ01_11_Alpha", "XSCCZ_CWJ01_01_D2_ALPHA.mat");
- path.Add("special/XSCCZ_CWJ01_12_Alpha", "XSCCZ_CWJ01_02_ALPHA.mat");
- path.Add("special/XSCCZ_CWJ01_08_Alpha", "XSCCZ_CWJ01_02_ALPHA.mat");
- path.Add("special/XSCCZ_CWJ01_01_Alpha", "XSCCZ_CWJ01_01_D_ALPHA.mat");
- path.Add("special/XSCCZ_JZ01_02_Alpha", "XSCCZ_JZ01_01_ALPHA.mat");
- path.Add("special/XSCCZ_JZ02_01_Alpha", "XSCCZ_JZ02_01_ALPHA.mat");
- path.Add("special/XSCCZ_WJ03_05_Alpha", "XSCCZ_WJ03_01_ALPHA.mat");
- path.Add("special/XSCCZ_WJ02_07_Alpha", "XSCCZ_WJ02_01_ALPHA.mat");
- path.Add("special/XSCCZ_CWJ01_13_Alpha", "XSCCZ_CWJ01_01_D2_ALPHA.mat");
-
- foreach (var item in path)
- {
- string prefab_path = item.Key;
- var obj = GameObject.Find(prefab_path);
- Debug.Log("obj = " + obj);
- if(obj)
- {
- MeshRenderer render = obj.GetComponent<MeshRenderer>();
- Debug.Log("render = " + render);
- if (render)
- {
- string root_path = "Assets/LuaFramework/AssetBundleRes/scene/terrain/map/1001_new/Materials/";
- string mat_path = root_path + item.Value;
- Debug.Log("mat_path = " + mat_path);
- var mat = AssetDatabase.LoadAssetAtPath<Material>(mat_path);
- if(mat)
- {
- Debug.Log("mat = " + mat);
- render.material = mat;
- }
- }
- }
- AssetDatabase.Refresh();
- AssetDatabase.SaveAssets();
- }
- }
- }
- #endif
|