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

122 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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