UI update 02
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
public static class DlcPackageBuilderEditor
|
||||
{
|
||||
private const string PackageExtension = "bsnkdlc";
|
||||
|
||||
[MenuItem("Bansonic/DLC/Build .bsnkdlc From Folder")]
|
||||
private static void BuildPackageFromFolder()
|
||||
{
|
||||
string sourceFolder = EditorUtility.OpenFolderPanel("选择 DLC 源文件夹", Application.dataPath, string.Empty);
|
||||
if (string.IsNullOrWhiteSpace(sourceFolder) || !Directory.Exists(sourceFolder))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string defaultName = new DirectoryInfo(sourceFolder).Name + "." + PackageExtension;
|
||||
string outputPath = EditorUtility.SaveFilePanel("保存 .bsnkdlc", Path.GetDirectoryName(sourceFolder), defaultName, PackageExtension);
|
||||
if (string.IsNullOrWhiteSpace(outputPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
BuildArchive(sourceFolder, outputPath);
|
||||
EditorUtility.DisplayDialog("DLC 打包完成", "已生成:\n" + outputPath, "确定");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError("[DLC] Build .bsnkdlc failed: " + ex);
|
||||
EditorUtility.DisplayDialog("DLC 打包失败", ex.Message, "确定");
|
||||
}
|
||||
}
|
||||
|
||||
private static void BuildArchive(string sourceFolder, string outputPath)
|
||||
{
|
||||
if (File.Exists(outputPath))
|
||||
{
|
||||
File.Delete(outputPath);
|
||||
}
|
||||
|
||||
string tempZipPath = outputPath + ".tmpzip";
|
||||
if (File.Exists(tempZipPath))
|
||||
{
|
||||
File.Delete(tempZipPath);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (FileStream stream = new FileStream(tempZipPath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))
|
||||
using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create))
|
||||
{
|
||||
string[] files = Directory.GetFiles(sourceFolder, "*", SearchOption.AllDirectories);
|
||||
for (int i = 0; i < files.Length; i++)
|
||||
{
|
||||
string filePath = files[i];
|
||||
string relativePath = filePath.Substring(sourceFolder.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
|
||||
relativePath = relativePath.Replace('\\', '/');
|
||||
archive.CreateEntryFromFile(filePath, relativePath, System.IO.Compression.CompressionLevel.Optimal);
|
||||
}
|
||||
}
|
||||
|
||||
File.Move(tempZipPath, outputPath);
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (File.Exists(tempZipPath))
|
||||
{
|
||||
File.Delete(tempZipPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 31641bdabfdff814dbdbdefacf70b4bf
|
||||
Reference in New Issue
Block a user