FM/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs

122 lines
4.3 KiB
C#
Raw Normal View History

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;
}
}