#unity/代码缓存 ## SDKEditor ``` cs using UnityEngine.Networking; using UnityEditor; using UnityEngine; using System.Threading.Tasks; using System.IO; using System.IO.Compression; public class SDKEditor : EditorWindow { private static SDKEditor _sdkEditor; [MenuItem("SDK/SDK编辑器",false)] public static void ShowSDKEditorWindow() { _sdkEditor = (SDKEditor)GetWindowWithRect(typeof(SDKEditor),new Rect(0,0,550,820),false,"SDK编辑器"); _sdkEditor.Show(); } // 假设这些是我们需要下载的文件的URL private string[] fileUrls = { "http://192.168.2.154/XPackage_Data/XPackage/Library/UniTask.zip", // 替换为实际的URL "http://192.168.2.154/XPackage_Data/XPackage/Library/XAsset.zip", "http://192.168.2.154/XPackage_Data/XPackage/Library/LiteHTTP.zip", }; // 下载并解压多个文件 private async void Start() { await DownloadAndExtractFilesAsync(fileUrls); } // 异步下载并解压所有文件 public async Task DownloadAndExtractFilesAsync(string[] urls) { // 逐个下载文件 foreach (var url in urls) { string filePath = await DownloadFileAsync(url); if (filePath != null) { // 解压下载的文件 await ExtractZipAsync(filePath); } } } // 下载文件并返回本地路径 public async Task DownloadFileAsync(string url) { string fileName = Path.GetFileName(url); string filePath = Path.Combine(Application.persistentDataPath, fileName); UnityWebRequest request = UnityWebRequest.Get(url); var operation = request.SendWebRequest(); while (!operation.isDone) { await Task.Yield(); // 让任务异步等待 } if (request.result == UnityWebRequest.Result.Success) { // 保存文件 File.WriteAllBytes(filePath, request.downloadHandler.data); Debug.Log($"Downloaded file: {fileName}"); return filePath; } else { Debug.LogError($"Failed to download {url}: {request.error}"); return null; } } // 解压zip文件 public async Task ExtractZipAsync(string filePath) { // 创建一个目标解压目录 string extractPath = Path.Combine(Application.persistentDataPath, Path.GetFileNameWithoutExtension(filePath)); if (!Directory.Exists(extractPath)) { Directory.CreateDirectory(extractPath); } // 异步解压 await Task.Run(() => { ZipFile.ExtractToDirectory(filePath, extractPath); Debug.Log($"Extracted to: {extractPath}"); }); } private void OnGUI() { if (GUILayout.Button("Add", GUILayout.Width(100))) { Start(); } } } ```