using UnityEngine; using UnityEngine.UI; using UnityEditor; using System.Collections; using System.Collections.Generic; using System.IO; public class ResourceModify : Editor { public static string ASSET_PATH = "/Project3D/BundleData"; [MenuItem("ProTool/ResTool/UIClass")] public static void ClassifyUIPrefabBundles() { string sysPath = Application.dataPath + ASSET_PATH + "/UI/Prefab"; string[] filePaths = Directory.GetFiles(sysPath, "*.prefab", SearchOption.AllDirectories); List uiFileNames = new List(); var uiPathInfos = typeof(UIInfo).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); foreach (var uiInfo in uiPathInfos) { if (uiInfo.FieldType != typeof(UIPathData)) continue; var uipathInfo = uiInfo.GetValue(null) as UIPathData; uiFileNames.Add(uipathInfo.name); } List prefabs = new List(); foreach (var file in filePaths) { string dataFile = file.Replace(Application.dataPath, "Assets"); string fileName = Path.GetFileNameWithoutExtension(file); if (!uiFileNames.Contains(fileName)) continue; fileName = fileName.ToLower(); Object assetData = AssetDatabase.LoadAssetAtPath(dataFile); Object[] dependObjs = EditorUtility.CollectDependencies(new Object[1] { assetData }); List containedDepend = new List(); prefabs.Add(assetData); foreach (var dependObj in dependObjs) { if (dependObj == null) continue; if (assetData == dependObj) continue; if (dependObj.name == assetData.name) continue; if (dependObj is GameObject) { var selectionPrefab = PrefabUtility.FindPrefabRoot(dependObj as GameObject); if (!prefabs.Contains(selectionPrefab)) { prefabs.Add(selectionPrefab); } //Debug.Log(selectionPrefab.name); //return; } } } foreach (var prefabObj in prefabs) { Object[] dependObjs = EditorUtility.CollectDependencies(new Object[1] { prefabObj }); List containedDepend = new List(); foreach (var dependObj in dependObjs) { if (dependObj == null) continue; if (prefabObj == dependObj) continue; if (dependObj.name == prefabObj.name) continue; if (dependObj is Texture2D) { string dependObjPath = AssetDatabase.GetAssetPath(dependObj); if (dependObjPath.Contains("第二版") || dependObjPath.Contains("第三版") || dependObjPath.Contains("第四版")) { Debug.Log("File:" + prefabObj.name + " contains old res:" + dependObjPath); } } } } } [MenuItem("ProTool/ResTool/UIClassSingle")] public static void GetSingleUIOldRes() { var selectUI = Selection.GetFiltered(typeof(GameObject), SelectionMode.Deep); for (int i = 0; i < selectUI.Length; ++i) { var uiGO = selectUI[i] as GameObject; var images = uiGO.GetComponentsInChildren(true); foreach (var image in images) { if (image.sprite == null) continue; string dependObjPath = AssetDatabase.GetAssetPath(image.sprite); if (dependObjPath.Contains("第二版") || dependObjPath.Contains("第三版") || dependObjPath.Contains("第四版")) { Debug.Log("Img:" + image.name + ", res:" + dependObjPath); } } } } [MenuItem("ProTool/ResTool/UICompress")] public static void UICompress() { List resFiles = new List(); string sysPath = Application.dataPath + ASSET_PATH + "/UI/Prefab"; string[] filePaths = Directory.GetFiles(sysPath, "*.prefab", SearchOption.AllDirectories); resFiles.AddRange(filePaths); sysPath = Application.dataPath + ASSET_PATH + "/UI/Sprites"; string[] directPaths = Directory.GetDirectories(sysPath); resFiles.AddRange(directPaths); sysPath = Application.dataPath + ASSET_PATH + "/UI/Texture"; directPaths = Directory.GetDirectories(sysPath); resFiles.AddRange(directPaths); sysPath = Application.dataPath + "/Res_newMS/ChangJing/Sence"; filePaths = Directory.GetFiles(sysPath, "*.unity", SearchOption.TopDirectoryOnly); resFiles.AddRange(filePaths); sysPath = Application.dataPath + ASSET_PATH + "/Model"; filePaths = Directory.GetFiles(sysPath, "*.prefab", SearchOption.AllDirectories); resFiles.AddRange(filePaths); sysPath = Application.dataPath + ASSET_PATH + "/Weapon"; filePaths = Directory.GetFiles(sysPath, "*.prefab", SearchOption.AllDirectories); resFiles.AddRange(filePaths); sysPath = Application.dataPath + ASSET_PATH + "/Effect"; filePaths = Directory.GetFiles(sysPath, "*.prefab", SearchOption.AllDirectories); resFiles.AddRange(filePaths); foreach (var file in resFiles) { string dataFile = file.Replace(Application.dataPath, "Assets"); string fileName = Path.GetFileNameWithoutExtension(file); fileName = fileName.ToLower(); Object assetData = AssetDatabase.LoadAssetAtPath(dataFile); Object[] dependObjs = EditorUtility.CollectDependencies(new Object[1] { assetData }); List containedDepend = new List(); foreach (var dependObj in dependObjs) { if (dependObj == null) continue; if (assetData == dependObj) continue; if (dependObj.name == assetData.name) continue; if (dependObj is Texture2D) { string dependObjPath = AssetDatabase.GetAssetPath(dependObj); if (dependObjPath == file) continue; var dependImporter = AssetImporter.GetAtPath(dependObjPath); TextureImporter resImporter = dependImporter as TextureImporter; if (resImporter != null) { //resImporter.spritePackingTag = dataFile; //resImporter.mipmapEnabled = false; resImporter.textureFormat = TextureImporterFormat.AutomaticTruecolor; } } } } AssetDatabase.Refresh(); } [MenuItem("ProTool/ResTool/TextureCompress")] public static void TextureCompress() { var selectTextures = Selection.GetFiltered(typeof(Texture), SelectionMode.DeepAssets); Debug.Log("selectTextures:" + selectTextures.Length); foreach (var texture in selectTextures) { var texturePath = AssetDatabase.GetAssetPath(texture); var dependImporter = AssetImporter.GetAtPath(texturePath); TextureImporter resImporter = dependImporter as TextureImporter; if (resImporter != null) { resImporter.textureType = TextureImporterType.Sprite; //resImporter.spritePackingTag = dataFile; resImporter.mipmapEnabled = false; resImporter.textureFormat = TextureImporterFormat.AutomaticTruecolor; } Debug.Log("set " + texturePath + " ok."); dependImporter.SaveAndReimport(); } AssetDatabase.Refresh(); } }