122 lines
4.3 KiB
C#
122 lines
4.3 KiB
C#
using System;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
using YooAsset.Editor;
|
||
|
||
/// <summary>
|
||
/// YooAsset编辑器工具:获取本地构建的最新版本号
|
||
/// </summary>
|
||
public class YooAssetLocalVersionFetcher : EditorWindow
|
||
{
|
||
// 目录配置(根据你的实际路径填写)
|
||
private string _rootBuildFolder = "Bundles"; // 根构建目录
|
||
private string _platformFolder = "StandaloneWindows64"; // 平台目录
|
||
private string _packageFolder = "DefaultPackage"; // 资源包目录
|
||
private string _latestVersion = "未找到版本信息";
|
||
|
||
// 打开工具窗口
|
||
[MenuItem("YooAsset/获取本地最新版本号(日期格式)")]
|
||
public static void ShowWindow()
|
||
{
|
||
GetWindow<YooAssetLocalVersionFetcher>("本地版本号查询");
|
||
}
|
||
|
||
private void OnGUI()
|
||
{
|
||
GUILayout.Label("版本目录配置", EditorStyles.boldLabel);
|
||
|
||
// 配置目录层级(与你的实际路径对应)
|
||
_rootBuildFolder = EditorGUILayout.TextField("根构建目录", _rootBuildFolder);
|
||
_platformFolder = EditorGUILayout.TextField("平台目录", _platformFolder);
|
||
_packageFolder = EditorGUILayout.TextField("资源包目录", _packageFolder);
|
||
|
||
// 配置目录层级(与你的实际路径对应)
|
||
|
||
GUILayout.Space(10);
|
||
|
||
// 点击获取最新版本
|
||
if (GUILayout.Button("获取本地最新版本号"))
|
||
{
|
||
FetchLatestVersion();
|
||
}
|
||
|
||
GUILayout.Space(10);
|
||
GUILayout.Label($"最新本地版本目录:{_latestVersion}", EditorStyles.label);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 从日期格式的版本目录中获取最新版本
|
||
/// </summary>
|
||
private void FetchLatestVersion()
|
||
{
|
||
// 1. 计算完整的版本根目录路径
|
||
// 你的目录结构:Bundles\StandaloneWindows64\DefaultPackage\版本目录
|
||
string versionRootPath = Path.Combine(_rootBuildFolder, _platformFolder, _packageFolder);
|
||
;
|
||
// 标准化路径(处理斜杠方向)
|
||
versionRootPath = Path.GetFullPath(versionRootPath);
|
||
|
||
// 2. 检查版本根目录是否存在
|
||
if (!Directory.Exists(versionRootPath))
|
||
{
|
||
_latestVersion = $"版本根目录不存在:{versionRootPath}\n请检查目录配置是否正确";
|
||
return;
|
||
}
|
||
|
||
// 3. 获取所有版本目录(如2025-08-25-669)
|
||
var versionDirectories = Directory.GetDirectories(versionRootPath)
|
||
.Select(Path.GetFileName)
|
||
.Where(dir => IsValidDateVersionFormat(dir)) // 过滤日期格式的目录
|
||
.ToList();
|
||
|
||
if (versionDirectories.Count == 0)
|
||
{
|
||
_latestVersion = $"未找到任何版本目录:{versionRootPath}\n请确认已构建资源";
|
||
return;
|
||
}
|
||
|
||
// 4. 按日期排序(最新的日期在最后)
|
||
var sortedVersions = versionDirectories
|
||
.OrderBy(dir => ParseDateFromVersion(dir)) // 按日期升序
|
||
.ToList();
|
||
|
||
// 5. 最新版本是最后一个
|
||
_latestVersion = sortedVersions.Last();
|
||
|
||
// 6. 验证该版本目录是否包含清单文件
|
||
string manifestPath = Path.Combine(versionRootPath, _latestVersion, "PackageManifest.manifest");
|
||
if (!File.Exists(manifestPath))
|
||
{
|
||
_latestVersion += "(警告:未找到PackageManifest.manifest,构建可能不完整)";
|
||
}
|
||
|
||
var v = Path.Combine(versionRootPath, _latestVersion);
|
||
Debug.Log(v);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 验证目录名是否为日期格式(如2025-08-25-669)
|
||
/// </summary>
|
||
private bool IsValidDateVersionFormat(string dirName)
|
||
{
|
||
// 分割格式:日期-编号(如2025-08-25-669 → 前3部分是日期)
|
||
string[] parts = dirName.Split('-');
|
||
if (parts.Length < 3)
|
||
return false;
|
||
|
||
// 尝试解析日期部分(前3段:年-月-日)
|
||
return DateTime.TryParse($"{parts[0]}-{parts[1]}-{parts[2]}", out _);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 从目录名中解析日期(用于排序)
|
||
/// </summary>
|
||
private DateTime ParseDateFromVersion(string dirName)
|
||
{
|
||
string[] parts = dirName.Split('-');
|
||
DateTime.TryParse($"{parts[0]}-{parts[1]}-{parts[2]}", out DateTime date);
|
||
return date;
|
||
}
|
||
} |