3.0 KiB
3.0 KiB
#unity/代码缓存
SDKEditor
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<string> 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();
}
}
}