93 lines
3.3 KiB
C#
93 lines
3.3 KiB
C#
|
using System.IO;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
|
|||
|
namespace YooAsset.Editor
|
|||
|
{
|
|||
|
public class CreateBuildinCatalogWindow : EditorWindow
|
|||
|
{
|
|||
|
static CreateBuildinCatalogWindow _thisInstance;
|
|||
|
|
|||
|
[MenuItem("YooAsset/Tools/内置清单生成工具(Catalog)", false, 101)]
|
|||
|
static void ShowWindow()
|
|||
|
{
|
|||
|
if (_thisInstance == null)
|
|||
|
{
|
|||
|
_thisInstance = EditorWindow.GetWindow(typeof(CreateBuildinCatalogWindow), false, "内置清单生成工具", true) as CreateBuildinCatalogWindow;
|
|||
|
_thisInstance.minSize = new Vector2(800, 600);
|
|||
|
}
|
|||
|
_thisInstance.Show();
|
|||
|
}
|
|||
|
|
|||
|
private string _directoryRoot = string.Empty;
|
|||
|
|
|||
|
private void OnGUI()
|
|||
|
{
|
|||
|
GUILayout.Space(10);
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
if (GUILayout.Button("选择内置资源目录", GUILayout.MaxWidth(150)))
|
|||
|
{
|
|||
|
string resultPath = EditorUtility.OpenFolderPanel("Find", "Assets/", "StreamingAssets");
|
|||
|
if (!string.IsNullOrEmpty(resultPath))
|
|||
|
_directoryRoot = resultPath;
|
|||
|
}
|
|||
|
EditorGUILayout.LabelField(_directoryRoot);
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(_directoryRoot) == false)
|
|||
|
{
|
|||
|
if (GUILayout.Button("生成Catalog文件", GUILayout.MaxWidth(150)))
|
|||
|
{
|
|||
|
CreateCatalogFile(_directoryRoot);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void CreateCatalogFile(string directoryRoot)
|
|||
|
{
|
|||
|
// 搜索所有Package目录
|
|||
|
List<string> packageRoots = GetPackageRoots(directoryRoot);
|
|||
|
foreach (var packageRoot in packageRoots)
|
|||
|
{
|
|||
|
DirectoryInfo directoryInfo = new DirectoryInfo(packageRoot);
|
|||
|
string packageName = directoryInfo.Name;
|
|||
|
try
|
|||
|
{
|
|||
|
bool result = CatalogTools.CreateCatalogFile(null, packageName, packageRoot); //TODO 自行处理解密
|
|||
|
if (result == false)
|
|||
|
{
|
|||
|
Debug.LogError($"Create package {packageName} catalog file failed ! See the detail error in console !");
|
|||
|
}
|
|||
|
}
|
|||
|
catch (System.Exception ex)
|
|||
|
{
|
|||
|
Debug.LogError($"Create package {packageName} catalog file failed ! {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private List<string> GetPackageRoots(string rootPath)
|
|||
|
{
|
|||
|
// 检查目录是否存在
|
|||
|
if (Directory.Exists(rootPath) == false)
|
|||
|
{
|
|||
|
throw new DirectoryNotFoundException($"目录不存在: {rootPath}");
|
|||
|
}
|
|||
|
|
|||
|
// 搜索所有 .version 文件(包含子目录)
|
|||
|
string[] versionFiles = Directory.GetFiles(
|
|||
|
rootPath,
|
|||
|
"*.version",
|
|||
|
SearchOption.AllDirectories
|
|||
|
);
|
|||
|
|
|||
|
// 提取文件所在目录路径并去重
|
|||
|
return versionFiles
|
|||
|
.Select(file => Path.GetDirectoryName(file))
|
|||
|
.Distinct()
|
|||
|
.ToList();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|