496 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			496 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using UnityEngine; | |||
|  | using System.Collections; | |||
|  | using UnityEditor; | |||
|  | using System.IO; | |||
|  | using System.Collections.Generic; | |||
|  | using LitJson; | |||
|  | using System.Text; | |||
|  | using System.Linq; | |||
|  | using System; | |||
|  | 
 | |||
|  | namespace WeChatWASM | |||
|  | { | |||
|  | 
 | |||
|  | 
 | |||
|  |     public class WXReplaceTextureData | |||
|  |     { | |||
|  |         public string path; | |||
|  |         public int width; | |||
|  |         public int height; | |||
|  |     } | |||
|  | 
 | |||
|  |     public class WXBundlePicDepsData | |||
|  |     { | |||
|  |         public string bundlePath; | |||
|  |         public List<WXReplaceTextureData> pics; | |||
|  |         public bool isCached; | |||
|  |     } | |||
|  | 
 | |||
|  |     public class WXFileCachedData | |||
|  |     { | |||
|  |         public string filePath; | |||
|  |         public string md5; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     public class JSTextureTaskConf | |||
|  |     { | |||
|  |         public string dst; | |||
|  |         public string dataPath; | |||
|  |         public bool useDXT5; | |||
|  |         public List<WXReplaceTextureData> textureList; | |||
|  |     } | |||
|  | 
 | |||
|  |     public class JSTextureData { | |||
|  |         public string p; | |||
|  |         public int w; | |||
|  |         public int h; | |||
|  |     } | |||
|  | 
 | |||
|  |     public class WXTextureFileCacheScriptObject | |||
|  |     { | |||
|  |         public int Version; | |||
|  |         public DateTime UpdateTime; | |||
|  |         public int CostTimeInSeconds; | |||
|  |         public List<WXFileCachedData> cachedDatas = new List<WXFileCachedData>(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public class WXTextureReplacerScriptObject | |||
|  |     { | |||
|  |         public int Version; | |||
|  |         public DateTime UpdateTime; | |||
|  |         public List<WXBundlePicDepsData> bundlePicDeps = new List<WXBundlePicDepsData>(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public class WXTextureEditorWindow : EditorWindow | |||
|  |     { | |||
|  |         public static WXEditorScriptObject miniGameConf; | |||
|  | 
 | |||
|  |         [MenuItem("微信小游戏 / 包体瘦身--压缩纹理")] | |||
|  |         public static void Open() | |||
|  |         { | |||
|  | 			miniGameConf = UnityUtil.GetEditorConf(); | |||
|  | 			var win = GetWindow(typeof(WXTextureEditorWindow), false, "包体瘦身--压缩纹理", true);//创建窗口 | |||
|  | 			win.minSize = new Vector2(600, 380); | |||
|  | 			win.maxSize = new Vector2(600, 380); | |||
|  | 			win.Show(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void Log(string type,string msg) { | |||
|  | 
 | |||
|  |             if (type == "Error") { | |||
|  |                 UnityEngine.Debug.LogError(msg); | |||
|  |             } else if (type == "Log") { | |||
|  |                 UnityEngine.Debug.Log(msg); | |||
|  |             } else if (type == "Warn") { | |||
|  |                 UnityEngine.Debug.LogWarning(msg); | |||
|  |             } | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         private static WXTextureReplacerScriptObject GetTextureEditorCacheConf() | |||
|  |         { | |||
|  |              var BundlePicsFilePath = Path.Combine(GetDestDir(), "BundlePicsFile.json"); | |||
|  |             string BundlePicsFileJson = ""; | |||
|  |             if (File.Exists(BundlePicsFilePath)) | |||
|  |             { | |||
|  |                 using (FileStream fileStream = new FileStream(BundlePicsFilePath, FileMode.Open, FileAccess.Read)) | |||
|  |                 { | |||
|  |                     using (StreamReader reader = new StreamReader(fileStream)) | |||
|  |                     { | |||
|  |                         BundlePicsFileJson = reader.ReadToEnd(); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             WXTextureReplacerScriptObject wXTextureReplacerScriptObject = JsonMapper.ToObject<WXTextureReplacerScriptObject>(BundlePicsFileJson); | |||
|  |             Dictionary<string, List<WXReplaceTextureData>> cacheMap = new Dictionary<string, List<WXReplaceTextureData>>(); | |||
|  |             if (wXTextureReplacerScriptObject == null) wXTextureReplacerScriptObject = new WXTextureReplacerScriptObject(); | |||
|  |             if (wXTextureReplacerScriptObject.bundlePicDeps == null) wXTextureReplacerScriptObject.bundlePicDeps = new List<WXBundlePicDepsData>(); | |||
|  |             return wXTextureReplacerScriptObject; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void CreateJSTask() | |||
|  |         { | |||
|  | 
 | |||
|  |             WXTextureReplacerScriptObject wXTextureReplacerScriptObject = GetTextureEditorCacheConf(); | |||
|  |             List<WXReplaceTextureData> list = new List<WXReplaceTextureData>(); | |||
|  |             Dictionary<string, List<WXReplaceTextureData>> cacheMap = new Dictionary<string, List<WXReplaceTextureData>>(); | |||
|  |             foreach (var item in wXTextureReplacerScriptObject.bundlePicDeps)  | |||
|  |             { | |||
|  |                 if(item.pics == null) | |||
|  |                 { | |||
|  |                     continue; | |||
|  |                 } | |||
|  |                 list = list.Union(item.pics).ToList(); | |||
|  |                 cacheMap.Add(item.bundlePath, item.pics); | |||
|  |             } | |||
|  |             var conf = new JSTextureTaskConf() | |||
|  |             { | |||
|  |                 dst = GetDestDir(), | |||
|  |                 dataPath = Application.dataPath, | |||
|  |                 useDXT5 = miniGameConf.CompressTexture.useDXT5, | |||
|  |                 textureList = list, | |||
|  |             }; | |||
|  | 
 | |||
|  |             File.WriteAllText(Application.dataPath + "/WX-WASM-SDK/Editor/Node/conf.js", "module.exports = " + JsonMapper.ToJson(conf)); | |||
|  | 
 | |||
|  |             UnityEngine.Debug.LogError($"最后一步请安装 Nodejs 然后进入{Application.dataPath}/WX-WASM-SDK/Editor/Node 目录用命令行,执行 ’node compress_astc_only.js‘ (开发阶段使用) 或 ’node compress_all.js‘(上线时候使用) 命令来生成纹理。"); | |||
|  | 
 | |||
|  |             ModifiyJsFile(cacheMap); | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void ModifiyJsFile(Dictionary<string, List<WXReplaceTextureData>> picDeps) { | |||
|  |              | |||
|  | 
 | |||
|  |             //修改使用纹理dxt | |||
|  |             string content = File.ReadAllText(Path.Combine(Application.dataPath, "WX-WASM-SDK", "wechat-default", "unity-sdk", "texture.js"), Encoding.UTF8); | |||
|  | 
 | |||
|  |             content = content.Replace("\"$UseDXT5$\"", miniGameConf.CompressTexture.useDXT5 ? "true" : "false"); | |||
|  | 
 | |||
|  |             File.WriteAllText(Path.Combine(miniGameConf.ProjectConf.DST, "minigame", "unity-sdk", "texture.js"), content, Encoding.UTF8); | |||
|  | 
 | |||
|  |             Dictionary<string, List<JSTextureData>> picDepsShort = new Dictionary<string, List<JSTextureData>>(); | |||
|  |             foreach(var item in picDeps) | |||
|  |             { | |||
|  |                 if (item.Key != "unity_default_resources") | |||
|  |                 { | |||
|  |                     var list = new List<JSTextureData>(); | |||
|  |                     if (item.Value == null) { | |||
|  |                         continue; | |||
|  |                     } | |||
|  |                     foreach (var data in item.Value) { | |||
|  |                         list.Add(new JSTextureData() | |||
|  |                         { | |||
|  |                             h = data.height, | |||
|  |                             w = data.width, | |||
|  |                             p = data.path | |||
|  |                         }); | |||
|  |                     } | |||
|  |                     picDepsShort.Add(item.Key,list); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             var textureConfigPath = Path.Combine(miniGameConf.ProjectConf.DST, "minigame", "texture-config.js"); | |||
|  | 
 | |||
|  |             if (miniGameConf.CompressTexture.parallelWithBundle) | |||
|  |             { | |||
|  | 
 | |||
|  |                 File.WriteAllText(textureConfigPath, "GameGlobal.USED_TEXTURE_COMPRESSION=true;GameGlobal.TEXTURE_PARALLEL_BUNDLE=true;GameGlobal.TEXTURE_BUNDLES = " + JsonMapper.ToJson(picDepsShort) , Encoding.UTF8); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 File.WriteAllText(textureConfigPath, "GameGlobal.USED_TEXTURE_COMPRESSION=true;GameGlobal.TEXTURE_PARALLEL_BUNDLE=false;GameGlobal.TEXTURE_BUNDLES = ''", Encoding.UTF8); | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         public static string GetDestDir() { | |||
|  |             var dstDir = miniGameConf.ProjectConf.DST + "/webgl-min"; | |||
|  |             if (!string.IsNullOrEmpty(miniGameConf.CompressTexture.dstMinDir)) | |||
|  |             { | |||
|  |                 dstDir = miniGameConf.CompressTexture.dstMinDir; | |||
|  |             } | |||
|  |             return dstDir; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static void ReplaceBundle() | |||
|  |         { | |||
|  | 
 | |||
|  |             if (string.IsNullOrEmpty(miniGameConf.CompressTexture.bundleSuffix)) { | |||
|  |                 UnityEngine.Debug.LogError("bundle后缀不能为空!"); | |||
|  |                 return; | |||
|  |             } | |||
|  |             if (string.IsNullOrEmpty(miniGameConf.ProjectConf.DST)) { | |||
|  |                 UnityEngine.Debug.LogError("请先转换为小游戏!"); | |||
|  |                 return; | |||
|  |             } | |||
|  |             if (!File.Exists(miniGameConf.ProjectConf.DST+"/webgl/index.html")) { | |||
|  |                 UnityEngine.Debug.LogError("请先转换为小游戏!并确保导出目录下存在webgl目录!"); | |||
|  |                 return; | |||
|  |             } | |||
|  |             UnityEngine.Debug.Log("Start! 【" + System.DateTime.Now.ToString("T") + "】"); | |||
|  | 
 | |||
|  |             var dstDir = GetDestDir(); | |||
|  |             var dstTexturePath = dstDir + "/Assets/Textures"; | |||
|  |             var sourceDir = miniGameConf.ProjectConf.DST + "/webgl"; | |||
|  |   | |||
|  |             var path = ""; | |||
|  |             var exePath = Path.Combine(Application.dataPath, "WX-WASM-SDK/Editor/TextureEditor/Release/WXTextureMin.exe"); | |||
|  |             var classDataPath = Path.Combine(Application.dataPath, "WX-WASM-SDK/Editor/TextureEditor/classdata.tpk"); | |||
|  |             var bundlePathArg = string.IsNullOrEmpty(miniGameConf.CompressTexture.bundleDir) ? "" : $" -bd {miniGameConf.CompressTexture.bundleDir}"; | |||
|  | #if UNITY_EDITOR_OSX | |||
|  |             var monoPath = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Unity.app/Contents/MonoBleedingEdge/bin/mono"); | |||
|  |             Path.Combine(Application.dataPath, "WX-WASM-SDK/Editor/TextureEditor/Release/WXTextureMin.exe"); | |||
|  |             WeChatWASM.UnityUtil.RunCmd(monoPath, string.Format($" {exePath} -b {miniGameConf.CompressTexture.bundleSuffix} " + | |||
|  |                     $" -d {dstDir}" + | |||
|  |                     $" -dt {dstTexturePath}" + | |||
|  |                     $" -s {sourceDir}" + | |||
|  |                     $" -c {classDataPath}"  + | |||
|  |                     $" {bundlePathArg}"), path, | |||
|  |                     (current, total, extInfo) => { | |||
|  |                         EditorUtility.DisplayProgressBar($"TextureMin Bundle处理中,当前:{current},总共:{total}", $"Handling:{extInfo}", current * 1.0f / total); | |||
|  |                     }); | |||
|  |             EditorUtility.ClearProgressBar(); | |||
|  | #else | |||
|  |             exePath = Path.Combine(Application.dataPath, "WX-WASM-SDK/Editor/TextureEditor/Release/WXTextureMin.exe"); | |||
|  |             WeChatWASM.UnityUtil.RunCmd(exePath, string.Format($" -b {miniGameConf.CompressTexture.bundleSuffix} " + | |||
|  |                     $" -d {dstDir}" + | |||
|  |                     $" -dt {dstTexturePath}" + | |||
|  |                     $" -s {sourceDir}" + | |||
|  |                     $" -c {classDataPath}"  +  | |||
|  |                     $" {bundlePathArg}"), path,  | |||
|  |                     (current, total, extInfo) => { | |||
|  |                         EditorUtility.DisplayProgressBar($"TextureMin Bundle处理中,当前:{current},总共:{total}", $"Handling:{extInfo}", current * 1.0f / total); | |||
|  |                     }); | |||
|  |             EditorUtility.ClearProgressBar(); | |||
|  | #endif | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |             OnReplaceEnd(); | |||
|  |         } | |||
|  | 
 | |||
|  |         private static void OnReplaceEnd() { | |||
|  | 
 | |||
|  |             CreateJSTask(); | |||
|  | 
 | |||
|  | 
 | |||
|  |             if (miniGameConf.ProjectConf.assetLoadType == 1) | |||
|  |             { | |||
|  | 
 | |||
|  |                 DirectoryInfo TheFolder = new DirectoryInfo(miniGameConf.ProjectConf.DST + "/minigame/data-package/"); | |||
|  |                 var dstDataFiles = TheFolder.GetFiles("*.txt"); | |||
|  |                 if (dstDataFiles.Length != 1) | |||
|  |                 { | |||
|  |                     Debug.LogError("目录minigame/data-package/无法找到data首资源文件, 无法进行首资源包替换"); | |||
|  |                     return; | |||
|  |                 } | |||
|  |                 var dstDataFile = dstDataFiles[0].FullName; | |||
|  |                 var sourceDataFile = Path.Combine(GetDestDir(), Path.GetFileName(dstDataFile)); | |||
|  |                 if (!File.Exists(sourceDataFile)) | |||
|  |                 { | |||
|  |                     Debug.LogError($"sourceDataFile not exist {sourceDataFile}"); | |||
|  |                     return; | |||
|  |                 } | |||
|  |                 File.Delete(dstDataFile); | |||
|  |                 File.Copy(sourceDataFile, dstDataFile); | |||
|  | 
 | |||
|  |             } | |||
|  |             // 替换资源文件后更新文件大小 | |||
|  |             // var info = new FileInfo(sourceDataFile); | |||
|  |             // var oldSize = WXEditorWindow.GetWindow<WXEditorWindow>().dataFileSize; | |||
|  |             // var newSize = info.Length.ToString(); | |||
|  |             // string[] files = {"game.js"}; | |||
|  |             // Rule[] rules = { | |||
|  |             //     new Rule() { | |||
|  |             //         old="DATA_FILE_SIZE: \"" + oldSize + "\"", | |||
|  |             //         newStr="DATA_FILE_SIZE: \"" + newSize + "\"" | |||
|  |             //     } | |||
|  |             // }; | |||
|  |             // WXEditorWindow.GetWindow<WXEditorWindow>().ReplaceFileContent(files, rules); | |||
|  | 
 | |||
|  |             UnityEngine.Debug.Log("Done! 【" + System.DateTime.Now.ToString("T") + "】"); | |||
|  |         } | |||
|  |   | |||
|  |         private void OnDisable() | |||
|  |         { | |||
|  |             EditorUtility.SetDirty(miniGameConf); | |||
|  |         } | |||
|  | 
 | |||
|  |         private void OnEnable() | |||
|  |         { | |||
|  |             miniGameConf = UnityUtil.GetEditorConf(); | |||
|  |         } | |||
|  | 
 | |||
|  |         private void OnGUI() | |||
|  | 		{ | |||
|  | 
 | |||
|  |             var labelStyle = new GUIStyle(EditorStyles.boldLabel); | |||
|  |             labelStyle.fontSize = 14; | |||
|  | 
 | |||
|  |             labelStyle.margin.left = 20; | |||
|  |             labelStyle.margin.top = 10; | |||
|  |             labelStyle.margin.bottom = 10; | |||
|  | 
 | |||
|  |             GUILayout.Label("基本设置", labelStyle); | |||
|  | 
 | |||
|  |             var inputStyle = new GUIStyle(EditorStyles.textField); | |||
|  |             inputStyle.fontSize = 14; | |||
|  |             inputStyle.margin.left = 20; | |||
|  |             inputStyle.margin.bottom = 10; | |||
|  |             inputStyle.margin.right = 20; | |||
|  | 
 | |||
|  |             GUIStyle toggleStyle = new GUIStyle(GUI.skin.toggle); | |||
|  |             toggleStyle.margin.left = 20; | |||
|  |             toggleStyle.margin.right = 20; | |||
|  | 
 | |||
|  |             miniGameConf.CompressTexture.bundleSuffix = EditorGUILayout.TextField(new GUIContent("bunlde文件后缀(?)", "多个不同后缀可用;分割开来"),miniGameConf.CompressTexture.bundleSuffix, inputStyle); | |||
|  | 
 | |||
|  |             GUILayout.Label(new GUIContent("功能选项(?)", "每次变更了下列选项都需要重新发布小游戏包"), labelStyle); | |||
|  |             GUILayout.BeginHorizontal(); | |||
|  | 
 | |||
|  |             var labelStyle2 = new GUIStyle(EditorStyles.label); | |||
|  | 
 | |||
|  |             labelStyle2.margin.left = 20; | |||
|  |             GUILayout.Label(new GUIContent("支持PC端压缩纹理(?)", "使PC微信也支持压缩纹理,不过会在开发阶段增加纹理生成耗时。"), labelStyle2, GUILayout.Height(22), GUILayout.Width(150)); | |||
|  | 
 | |||
|  |             miniGameConf.CompressTexture.useDXT5 = GUILayout.Toggle(miniGameConf.CompressTexture.useDXT5, "", GUILayout.Height(22), GUILayout.Width(50)); | |||
|  | 
 | |||
|  |             GUILayout.Label(new GUIContent("纹理与bundle并行加载(?)", "默认纹理是解析bundle后才加载,勾选后加载bundle时bundle对应纹理就会同时加载。"), labelStyle2, GUILayout.Height(22), GUILayout.Width(150)); | |||
|  | 
 | |||
|  |             miniGameConf.CompressTexture.parallelWithBundle = GUILayout.Toggle(miniGameConf.CompressTexture.parallelWithBundle, "", GUILayout.Height(22), GUILayout.Width(50)); | |||
|  | 
 | |||
|  |             GUILayout.EndHorizontal(); | |||
|  | 
 | |||
|  |             GUILayout.Label(new GUIContent("自定义目录(?)", "默认不用选择"), labelStyle); | |||
|  | 
 | |||
|  |             var labelStyle3 = new GUIStyle(EditorStyles.boldLabel); | |||
|  |             labelStyle3.fontSize = 12; | |||
|  | 
 | |||
|  |             labelStyle3.margin.left = 20; | |||
|  |             labelStyle3.margin.top = 10; | |||
|  |             labelStyle3.margin.bottom = 10; | |||
|  | 
 | |||
|  |             GUILayout.Label("bundle路径", labelStyle3); | |||
|  | 
 | |||
|  |             var chooseBundlePathButtonClicked = false; | |||
|  |             var openBundleButtonClicked = false; | |||
|  |             var resetBundleButtonClicked = false; | |||
|  | 
 | |||
|  |             int pathButtonHeight = 28; | |||
|  |             GUIStyle pathLabelStyle = new GUIStyle(GUI.skin.textField); | |||
|  |             pathLabelStyle.fontSize = 12; | |||
|  |             pathLabelStyle.alignment = TextAnchor.MiddleLeft; | |||
|  |             pathLabelStyle.margin.top = 6; | |||
|  |             pathLabelStyle.margin.bottom = 6; | |||
|  |             pathLabelStyle.margin.left = 20; | |||
|  | 
 | |||
|  |             if (string.IsNullOrEmpty(miniGameConf.CompressTexture.bundleDir)) | |||
|  |             { | |||
|  |                 GUIStyle pathButtonStyle2 = new GUIStyle(GUI.skin.button); | |||
|  |                 pathButtonStyle2.fontSize = 12; | |||
|  |                 pathButtonStyle2.margin.left = 20; | |||
|  | 
 | |||
|  |                 chooseBundlePathButtonClicked = GUILayout.Button("选择自定义bundle路径,默认不用选", pathButtonStyle2, GUILayout.Height(30), GUILayout.Width(300)); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 GUILayout.BeginHorizontal(); | |||
|  |                 // 路径框 | |||
|  |                 GUILayout.Label(miniGameConf.CompressTexture.bundleDir, pathLabelStyle, GUILayout.Height(pathButtonHeight - 6), GUILayout.ExpandWidth(true), GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 126)); | |||
|  |                 openBundleButtonClicked = GUILayout.Button("打开", GUILayout.Height(pathButtonHeight), GUILayout.Width(40)); | |||
|  |                 resetBundleButtonClicked = GUILayout.Button("重选", GUILayout.Height(pathButtonHeight), GUILayout.Width(40)); | |||
|  |                 GUILayout.EndHorizontal(); | |||
|  |             } | |||
|  |             EditorGUILayout.Space(); | |||
|  | 
 | |||
|  | 
 | |||
|  |             if (chooseBundlePathButtonClicked) | |||
|  |             { | |||
|  |                 // 弹出选目录窗口 | |||
|  |                 var dstPath = EditorUtility.SaveFolderPanel("选择你的bundle目录", "", ""); | |||
|  | 
 | |||
|  |                 if (dstPath != "") | |||
|  |                 { | |||
|  |                     miniGameConf.CompressTexture.bundleDir = dstPath; | |||
|  |                 } | |||
|  | 
 | |||
|  |             } | |||
|  | 
 | |||
|  |             if (openBundleButtonClicked) | |||
|  |             { | |||
|  |                 UnityUtil.ShowInExplorer(miniGameConf.CompressTexture.bundleDir); | |||
|  |             } | |||
|  |             if (resetBundleButtonClicked) | |||
|  |             { | |||
|  |                 miniGameConf.CompressTexture.bundleDir = ""; | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |             GUILayout.Label("自定义资源处理后存放路径", labelStyle3); | |||
|  | 
 | |||
|  |             var chooseDstPathButtonClicked = false; | |||
|  |             var openDstButtonClicked = false; | |||
|  |             var resetDstButtonClicked = false; | |||
|  | 
 | |||
|  | 
 | |||
|  |             if (string.IsNullOrEmpty(miniGameConf.CompressTexture.dstMinDir)) | |||
|  |             { | |||
|  |                 GUIStyle pathButtonStyle2 = new GUIStyle(GUI.skin.button); | |||
|  |                 pathButtonStyle2.fontSize = 12; | |||
|  |                 pathButtonStyle2.margin.left = 20; | |||
|  | 
 | |||
|  |                 chooseDstPathButtonClicked = GUILayout.Button("选择自定义资源处理后存放路径,默认不用选", pathButtonStyle2, GUILayout.Height(30), GUILayout.Width(300)); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 GUILayout.BeginHorizontal(); | |||
|  |                 // 路径框 | |||
|  |                 GUILayout.Label(miniGameConf.CompressTexture.dstMinDir, pathLabelStyle, GUILayout.Height(pathButtonHeight - 6), GUILayout.ExpandWidth(true), GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 126)); | |||
|  |                 openDstButtonClicked = GUILayout.Button("打开", GUILayout.Height(pathButtonHeight), GUILayout.Width(40)); | |||
|  |                 resetDstButtonClicked = GUILayout.Button("重选", GUILayout.Height(pathButtonHeight), GUILayout.Width(40)); | |||
|  |                 GUILayout.EndHorizontal(); | |||
|  |             } | |||
|  |             EditorGUILayout.Space(); | |||
|  | 
 | |||
|  | 
 | |||
|  |             if (chooseDstPathButtonClicked) | |||
|  |             { | |||
|  |                 // 弹出选目录窗口 | |||
|  |                 var dstPath = EditorUtility.SaveFolderPanel("选择你的自定义资源处理后存放路径", "", ""); | |||
|  | 
 | |||
|  |                 if (dstPath != "") | |||
|  |                 { | |||
|  |                     miniGameConf.CompressTexture.dstMinDir = dstPath; | |||
|  |                 } | |||
|  | 
 | |||
|  |             } | |||
|  | 
 | |||
|  |             if (openDstButtonClicked) | |||
|  |             { | |||
|  |                 UnityUtil.ShowInExplorer(miniGameConf.CompressTexture.dstMinDir); | |||
|  |             } | |||
|  |             if (resetDstButtonClicked) | |||
|  |             { | |||
|  |                 miniGameConf.CompressTexture.dstMinDir = ""; | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |             GUILayout.Label("操作", labelStyle); | |||
|  | 
 | |||
|  |             GUIStyle pathButtonStyle = new GUIStyle(GUI.skin.button); | |||
|  |             pathButtonStyle.fontSize = 12; | |||
|  |             pathButtonStyle.margin.left = 20; | |||
|  |             pathButtonStyle.margin.right = 20; | |||
|  | 
 | |||
|  |             EditorGUILayout.BeginHorizontal(); | |||
|  | 
 | |||
|  | 
 | |||
|  |             var replaceTexture = GUILayout.Button(new GUIContent("处理资源(?)", "处理完成后会在导出目录生成webgl-min目录,bundle文件要换成使用webgl-min目录下的bundle文件,xx.webgl.data.unityweb.bin.txt文件也要换成使用webgl-min目录下对应的文件,注意要将导出目录里面Assets目录下的都上传至CDN对应路径,小游戏里才会显示成正常的压缩纹理。注意bundle文件不能开启crc校验,否则会展示异常。"), pathButtonStyle, GUILayout.Height(40), GUILayout.Width(140)); | |||
|  | 
 | |||
|  | 
 | |||
|  |             var goReadMe = GUILayout.Button(new GUIContent("README"), pathButtonStyle, GUILayout.Height(40), GUILayout.Width(80)); | |||
|  | 
 | |||
|  |             EditorGUILayout.EndHorizontal(); | |||
|  | 
 | |||
|  |             if (replaceTexture) | |||
|  |             { | |||
|  |                 ReplaceBundle(); | |||
|  |             } | |||
|  | 
 | |||
|  |             if (goReadMe) | |||
|  |             { | |||
|  |                 Application.OpenURL("https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/CompressedTexture.md"); | |||
|  |             } | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  | 	} | |||
|  | 
 | |||
|  | } |