diff --git a/Assets/Resources/PatchWindow.prefab b/Assets/Resources/PatchWindow.prefab
index 0f81b2d..8af48f8 100644
--- a/Assets/Resources/PatchWindow.prefab
+++ b/Assets/Resources/PatchWindow.prefab
@@ -67,7 +67,7 @@ MonoBehaviour:
m_Calls: []
m_text: No
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -282,8 +282,9 @@ MonoBehaviour:
m_Calls: []
m_text: Error Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
- m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_fontAsset: {fileID: 11400000, guid: 41512a7f2b107664d9d14634f444209a, type: 2}
+ m_sharedMaterial: {fileID: -3454106745002405512, guid: 41512a7f2b107664d9d14634f444209a,
+ type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
@@ -329,7 +330,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
- m_ActiveFontFeatures: 00000000
+ m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -806,7 +807,7 @@ MonoBehaviour:
m_Calls: []
m_text: Download Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -942,7 +943,7 @@ MonoBehaviour:
m_Calls: []
m_text: Download Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -1078,7 +1079,7 @@ MonoBehaviour:
m_Calls: []
m_text: Single
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -1508,7 +1509,7 @@ MonoBehaviour:
m_Calls: []
m_text: Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -1680,7 +1681,7 @@ MonoBehaviour:
m_Calls: []
m_text: Download Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -2102,7 +2103,7 @@ MonoBehaviour:
m_Calls: []
m_text: Yes
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -2238,7 +2239,7 @@ MonoBehaviour:
m_Calls: []
m_text: Quit
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
+ m_fontAsset: {fileID: 0}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
@@ -2707,8 +2708,9 @@ MonoBehaviour:
m_Calls: []
m_text: Error Tips
m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: b62d42a4efb0a374b8d61e0f108b3d4d, type: 2}
- m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_fontAsset: {fileID: 11400000, guid: 41512a7f2b107664d9d14634f444209a, type: 2}
+ m_sharedMaterial: {fileID: -3454106745002405512, guid: 41512a7f2b107664d9d14634f444209a,
+ type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
@@ -2754,7 +2756,7 @@ MonoBehaviour:
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
- m_ActiveFontFeatures: 00000000
+ m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
@@ -2809,12 +2811,12 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 7576580477895193190}
+ - {fileID: 2842693604647789047}
- {fileID: 2747978461159930281}
- {fileID: 256288714842573992}
- {fileID: 123959232355030105}
- {fileID: 1686210318258698559}
- {fileID: 8786280722722952149}
- - {fileID: 2842693604647789047}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
diff --git a/Assets/Scenes/FUJIFILM.unity b/Assets/Scenes/FUJIFILM.unity
index 16f1ea9..a486838 100644
--- a/Assets/Scenes/FUJIFILM.unity
+++ b/Assets/Scenes/FUJIFILM.unity
@@ -5795,7 +5795,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 71b2355dc85b45e2aacc12328451f8d1, type: 3}
m_Name:
m_EditorClassIdentifier:
- PlayMode: 0
+ PlayMode: 2
packageName: DefaultPackage
hostServerIP: https://kiosk-assets-bundle.oss-cn-hongkong.aliyuncs.com/Framework/CDN/
sceneName:
diff --git a/Assets/Scripts/Base/Net/AliyunOSSManager.cs b/Assets/Scripts/Base/Net/AliyunOSSManager.cs
index 69faf6f..3737367 100644
--- a/Assets/Scripts/Base/Net/AliyunOSSManager.cs
+++ b/Assets/Scripts/Base/Net/AliyunOSSManager.cs
@@ -1,5 +1,6 @@
using System;
using System.IO;
+using System.Threading;
using System.Threading.Tasks;
using Aliyun.OSS;
using Aliyun.OSS.Common;
@@ -7,6 +8,7 @@ using UnityEngine;
namespace HK
{
+ [System.Serializable]
public class OSSConfig
{
// 阿里云AccessKeyId
@@ -22,10 +24,10 @@ namespace HK
public string bucketName = "kiosk-assets-bundle";
// OSS上的资源根存储目录
- public string ossRootDirectory = "Framework/"; //
+ public string ossRootDirectory = "Framework"; //
// OSS上的资源相对存储目录
- public string ossRelativePath = "GameRes/v1.0/"; //
+ public string ossRelativePath = ""; //
}
///
@@ -201,6 +203,69 @@ namespace HK
}
}
+ public async Task UploadDirectoryAsync(string localDirectory, string ossDirectory, CancellationToken cancellationToken = default,
+ Action progressCallback = null)
+ {
+ if (!CheckInitialized()) return false;
+ if (!Directory.Exists(localDirectory))
+ {
+ Debug.LogError($"本地目录不存在: {localDirectory}");
+ return false;
+ }
+
+ try
+ {
+ // 检查是否已取消
+ cancellationToken.ThrowIfCancellationRequested();
+
+ // 获取所有文件
+ string[] allFiles = Directory.GetFiles(localDirectory, "*.*", SearchOption.AllDirectories);
+ int totalCount = allFiles.Length;
+ int currentCount = 0;
+
+ foreach (string filePath in allFiles)
+ {
+ // 每次循环开始前检查是否取消
+ cancellationToken.ThrowIfCancellationRequested();
+
+ // 计算相对路径
+ string relativePath = Path.GetRelativePath(localDirectory, filePath);
+ // 转换为OSS路径格式(替换反斜杠为正斜杠)
+ relativePath = relativePath.Replace('\\', '/');
+
+ // 构建OSS目标路径
+ string ossTargetPath = string.IsNullOrEmpty(ossDirectory)
+ ? relativePath
+ : $"{ossDirectory}/{relativePath}";
+
+ // 上传单个文件(传入取消令牌)
+ bool success = await UploadFileAsync(filePath, ossTargetPath);
+ if (!success)
+ {
+ Debug.LogError($"目录上传中断,文件上传失败: {filePath}");
+ return false;
+ }
+
+ // 进度回调
+ currentCount++;
+ progressCallback?.Invoke(currentCount, totalCount);
+ }
+
+ Debug.Log($"目录上传完成,共上传 {totalCount} 个文件");
+ return true;
+ }
+ catch (OperationCanceledException)
+ {
+ Debug.Log("目录上传已被取消");
+ return false;
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"目录上传异常: {ex.Message}");
+ return false;
+ }
+ }
+
///
/// 从OSS下载文件到本地(优化版)
///
diff --git a/Assets/Scripts/Base/Res/InitializePackage.cs b/Assets/Scripts/Base/Res/InitializePackage.cs
index 624bd11..4833147 100644
--- a/Assets/Scripts/Base/Res/InitializePackage.cs
+++ b/Assets/Scripts/Base/Res/InitializePackage.cs
@@ -178,34 +178,29 @@ namespace HK
///
private string GetHostServerURL()
{
- // OSS基础信息(替换为你的Bucket信息)
- string bucketName = "kiosk-assets-bundle";
- string endpoint = "oss-cn-hongkong.aliyuncs.com"; // 地域Endpoint
- string appVersion = "v1.0"; // 资源版本号(需与OSS目录一致)
- string rootPath = "Framework/CDN"; // OSS上的资源根目录
+ //string hostServerIP = "http://10.0.2.2"; //安卓模拟器地址
+ // string hostServerIP = "http://127.0.0.1";
+ string hostServerIP = "https://kiosk-assets-bundle.oss-cn-hongkong.aliyuncs.com/Framework";
+ string appVersion = "v1.0";
- // 获取平台路径(与OSS的平台目录对应)
- string platformPath = GetPlatformPath();
-
- // 拼接OSS完整URL(格式:https://bucket.endpoint/rootPath/platform/version/)
- // https://kiosk-assets-bundle.oss-cn-hongkong.aliyuncs.com/FUJIFILM/CDN/PC/v1.0/01184a0f7f1c00a9e28a6932cfbe1a4f.bundle
- return $"https://{bucketName}.{endpoint}/{rootPath}/{platformPath}/{appVersion}/";
- }
-
-// 辅助方法:获取平台对应的目录名
- private string GetPlatformPath()
- {
#if UNITY_EDITOR
- var buildTarget = UnityEditor.EditorUserBuildSettings.activeBuildTarget;
- if (buildTarget == UnityEditor.BuildTarget.Android) return "Android";
- else if (buildTarget == UnityEditor.BuildTarget.iOS) return "iOS";
- else if (buildTarget == UnityEditor.BuildTarget.WebGL) return "WebGL";
- else return "PC";
+ if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android)
+ return $"{hostServerIP}/CDN/Android/{appVersion}";
+ else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS)
+ return $"{hostServerIP}/CDN/IPhone/{appVersion}";
+ else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL)
+ return $"{hostServerIP}/CDN/WebGL/{appVersion}";
+ else
+ return $"{hostServerIP}/CDN/PC/{appVersion}";
#else
- if (Application.platform == RuntimePlatform.Android) return "Android";
- else if (Application.platform == RuntimePlatform.IPhonePlayer) return "iOS";
- else if (Application.platform == RuntimePlatform.WebGLPlayer) return "WebGL";
- else return "PC";
+ if (Application.platform == RuntimePlatform.Android)
+ return $"{hostServerIP}/CDN/Android/{appVersion}";
+ else if (Application.platform == RuntimePlatform.IPhonePlayer)
+ return $"{hostServerIP}/CDN/IPhone/{appVersion}";
+ else if (Application.platform == RuntimePlatform.WebGLPlayer)
+ return $"{hostServerIP}/CDN/WebGL/{appVersion}";
+ else
+ return $"{hostServerIP}/CDN/PC/{appVersion}";
#endif
}
@@ -240,6 +235,7 @@ namespace HK
private async UniTask UpdatePackageVersion()
{
+ Debug.Log("请求资源版本 !");
var package = YooAssets.GetPackage(PackageName);
var operation = package.RequestPackageVersionAsync();
await operation.Task;
@@ -265,6 +261,7 @@ namespace HK
private async UniTask FsmUpdatePackageManifest()
{
+ Debug.Log("更新资源清单!");
var package = YooAssets.GetPackage(PackageName);
var operation = package.UpdatePackageManifestAsync(packageVersion);
await operation.Task;
@@ -288,7 +285,7 @@ namespace HK
private async UniTask FsmCreateDownloader()
{
await UniTask.Yield();
- Log.Debug("创建资源下载器!");
+ Debug.Log("创建资源下载器!");
CreateDownloader();
}
@@ -326,7 +323,7 @@ namespace HK
private async UniTask FsmDownloadPackageFiles()
{
await UniTask.Yield();
- Log.Debug("开始下载资源文件!");
+ Debug.Log("开始下载资源文件!");
downloader.DownloadErrorCallback = DownloadErrorCallback;
downloader.DownloadUpdateCallback = DownloadProgressCallback;
downloader.BeginDownload();
@@ -360,7 +357,7 @@ namespace HK
private async UniTask FsmDownloadPackageOver()
{
await UniTask.Yield();
- Log.Debug("资源文件下载完毕!");
+ Debug.Log("资源文件下载完毕!");
await FsmClearCacheBundle();
}
@@ -371,7 +368,7 @@ namespace HK
private async UniTask FsmClearCacheBundle()
{
await UniTask.Yield();
- Log.Debug("清理未使用的缓存文件!");
+ Debug.Log("清理未使用的缓存文件!");
var package = YooAssets.GetPackage(PackageName);
var operation = package.ClearCacheFilesAsync(EFileClearMode.ClearUnusedBundleFiles);
operation.Completed += Operation_Completed;
@@ -389,7 +386,7 @@ namespace HK
private async UniTask FsmStartGame()
{
await UniTask.Yield();
- Log.Debug("开始游戏!");
+ Debug.Log("开始游戏!");
}
#endregion
diff --git a/Assets/Scripts/Editor/UploadAssets/UploadResourcesEditor.cs b/Assets/Scripts/Editor/UploadAssets/UploadResourcesEditor.cs
index b13ee43..a4d0adb 100644
--- a/Assets/Scripts/Editor/UploadAssets/UploadResourcesEditor.cs
+++ b/Assets/Scripts/Editor/UploadAssets/UploadResourcesEditor.cs
@@ -1,60 +1,46 @@
using System;
using System.IO;
using System.Linq;
+using System.Threading;
using Cysharp.Threading.Tasks;
using Sirenix.OdinInspector;
using Sirenix.OdinInspector.Editor;
using UnityEditor;
using UnityEngine;
+using UnityEngine.Serialization;
namespace HK.Editor
{
- public class UploadResourcesEditor : OdinEditorWindow
+ [System.Serializable]
+ public class OSSConfig : HK.OSSConfig
{
- [MenuItem("Tool/Upload Resources")]
- static void GetWindow()
+ [ReadOnly] public BuildTargetPlatform platform;
+ public string appVersion;
+
+ public string GetOssUploadUrl()
{
- // GetWindow().Show();
- var window = GetWindow();
- window.projectName = Application.productName;
- window.version = "v1.0";
- window.platform = BuildTargetPlatform.StandaloneWindows;
- window.Show();
+ // https://kiosk-assets-bundle.oss-cn-hongkong.aliyuncs.com/Framework
+ return $"CDN/{GetPlatformName()}/{appVersion}";
}
- [FolderPath] public string serverUrl;
- [FolderPath] public string assetRootFolder;
- public string projectName;
- public BuildTargetPlatform platform;
- public string version;
-
-
- [Button("上传资源到本地服务器")]
- public void UploadResources()
+ string GetPlatformName()
{
- Debug.Log("Upload Resources Start");
- var directories = Directory.GetDirectories(assetRootFolder);
- var strings = directories.OrderByDescending(a => new DirectoryInfo(a).CreationTime).ToArray();
- Debug.Log(strings[0]);
- var paths = Directory.GetFiles(strings[0]);
-
- string platformPath = "";
switch (platform)
{
case BuildTargetPlatform.StandaloneWindows:
- platformPath = "PC";
+ return "PC";
break;
case BuildTargetPlatform.StandaloneWindows64:
- platformPath = "PC";
+ return "PC";
break;
case BuildTargetPlatform.Android:
- platformPath = "Android";
+ return "Android";
break;
case BuildTargetPlatform.WebGL:
- platformPath = "WebGL";
+ return "WebGL";
break;
case BuildTargetPlatform.IOS:
- platformPath = "IOS";
+ return "iOS";
break;
case BuildTargetPlatform.StandaloneOSX:
break;
@@ -68,21 +54,140 @@ namespace HK.Editor
throw new ArgumentOutOfRangeException();
}
- var serverPath = Path.Combine(serverUrl, projectName, platformPath, version);
- if (!Directory.Exists(serverPath))
+ return "";
+ }
+ }
+
+ [System.Serializable]
+ public class ResourceConfig
+ {
+ public string rootFolder = "Bundles";
+ public BuildTargetPlatform platform = BuildTargetPlatform.StandaloneWindows64;
+ public string packageName = "DefaultPackage";
+ [ReadOnly] public string latestVersionPath;
+
+ public string GetPackageFolder()
+ {
+ return Path.Combine(rootFolder, platform.ToString().Replace(" ", ""), packageName);
+ }
+ }
+
+ public class UploadResourcesEditor : OdinEditorWindow
+ {
+ [MenuItem("Tool/Upload Resources")]
+ static void GetWindow()
+ {
+ // GetWindow().Show();
+ var window = GetWindow();
+ window.ossConfig = new OSSConfig();
+ window.ossConfig.appVersion = "v1.0";
+ window.ossConfig.platform = BuildTargetPlatform.StandaloneWindows;
+ window.Show();
+ }
+
+ public OSSConfig ossConfig;
+ public ResourceConfig resourceConfig;
+
+ [Button("GetAssetVersion")]
+ public void GetAssetVersion()
+ {
+ string _latestVersion;
+ string versionRootPath = resourceConfig.GetPackageFolder();
+ Debug.Log(versionRootPath);
+ versionRootPath = Path.GetFullPath(versionRootPath);
+ // 2. 检查版本根目录是否存在
+ if (!Directory.Exists(versionRootPath))
{
- Directory.CreateDirectory(serverPath);
+ Debug.Log($"版本根目录不存在:{versionRootPath}\n请检查目录配置是否正确");
+ return;
}
- foreach (var path in paths)
+ // 3. 获取所有版本目录(如2025-08-25-669)
+ var versionDirectories = Directory.GetDirectories(versionRootPath)
+ .Select(Path.GetFileName)
+ .Where(dir => IsValidDateVersionFormat(dir)) // 过滤日期格式的目录
+ .ToList();
+
+ if (versionDirectories.Count == 0)
{
- var fileInfo = new FileInfo(path);
- var combine = Path.Combine(serverPath, fileInfo.Name);
- fileInfo.CopyTo(combine, true);
+ Debug.Log($"未找到任何版本目录:{versionRootPath}\n请确认已构建资源");
+ return;
}
- Debug.Log($"Upload Resources version is {strings[0]}");
+ // 4. 按日期排序(最新的日期在最后)
+ var sortedVersions = versionDirectories
+ .OrderBy(dir => ParseDateFromVersion(dir)) // 按日期升序
+ .ToList();
+
+ // 5. 最新版本是最后一个
+ _latestVersion = sortedVersions.Last();
+
+ resourceConfig.latestVersionPath = Path.Combine(versionRootPath, _latestVersion);
+ ossConfig.platform = resourceConfig.platform;
+ }
+
+ ///
+ /// 验证目录名是否为日期格式(如2025-08-25-669)
+ ///
+ 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 _);
+ }
+
+ ///
+ /// 从目录名中解析日期(用于排序)
+ ///
+ private DateTime ParseDateFromVersion(string dirName)
+ {
+ string[] parts = dirName.Split('-');
+ DateTime.TryParse($"{parts[0]}-{parts[1]}-{parts[2]}", out DateTime date);
+ return date;
+ }
+
+ CancellationTokenSource source;
+ bool isUploading = false;
+
+ [ReadOnly] [ShowIf("isUploading")] [ProgressBar(0, 100, 0, 255, 0)]
+ public float progress;
+
+ [Button("上传资源到本地服务器")]
+ public async void UploadResources()
+ {
+ Debug.Log("Upload Resources Start");
+ isUploading = true;
+ progress = 0;
+ GetAssetVersion();
+
+ var ossUploadUrl = ossConfig.GetOssUploadUrl();
+ Debug.Log(ossUploadUrl);
+
+ AliyunOSSManager.Instance.Initialize(ossConfig);
+ source = new CancellationTokenSource();
+ await AliyunOSSManager.Instance.UploadDirectoryAsync(resourceConfig.latestVersionPath, ossUploadUrl,
+ source.Token,
+ ProgressCallback);
+ isUploading = false;
Debug.Log("Upload Resources Finished");
}
+
+ [ShowIf("isUploading")]
+ [Button("取消上传资源到本地服务器")]
+ public void CancelUploadResources()
+ {
+ progress = 0;
+ source.Cancel();
+ }
+
+ private void ProgressCallback(int arg1, int arg2)
+ {
+ progress = ((float)arg1 / arg2) * 100;
+ Debug.Log($"progress {arg1}/{arg2}");
+ }
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs b/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs
new file mode 100644
index 0000000..8afb5a1
--- /dev/null
+++ b/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs
@@ -0,0 +1,122 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+using YooAsset.Editor;
+
+///
+/// YooAsset编辑器工具:获取本地构建的最新版本号
+///
+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("本地版本号查询");
+ }
+
+ 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);
+ }
+
+ ///
+ /// 从日期格式的版本目录中获取最新版本
+ ///
+ 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);
+ }
+
+ ///
+ /// 验证目录名是否为日期格式(如2025-08-25-669)
+ ///
+ 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 _);
+ }
+
+ ///
+ /// 从目录名中解析日期(用于排序)
+ ///
+ private DateTime ParseDateFromVersion(string dirName)
+ {
+ string[] parts = dirName.Split('-');
+ DateTime.TryParse($"{parts[0]}-{parts[1]}-{parts[2]}", out DateTime date);
+ return date;
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs.meta b/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs.meta
new file mode 100644
index 0000000..8116258
--- /dev/null
+++ b/Assets/Scripts/Editor/UploadAssets/YooAssetLocalVersionFetcher.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 334914fe30cd4b55acd8eacfc26f81e4
+timeCreated: 1757820725
\ No newline at end of file
diff --git a/Assets/Scripts/Test.meta b/Assets/Scripts/Test.meta
new file mode 100644
index 0000000..b44f5e5
--- /dev/null
+++ b/Assets/Scripts/Test.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 6ce5fef283ca4959b4f901c1ee2baa4c
+timeCreated: 1757755894
\ No newline at end of file
diff --git a/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.bytes b/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.bytes
index 3d356b8..b111880 100644
Binary files a/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.bytes and b/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.bytes differ
diff --git a/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.json b/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.json
index db23f92..3585291 100644
--- a/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.json
+++ b/Assets/StreamingAssets/yoo/DefaultPackage/BuildinCatalog.json
@@ -1,7 +1,7 @@
{
"FileVersion": "1.0.0",
"PackageName": "DefaultPackage",
- "PackageVersion": "2025-09-13-1017",
+ "PackageVersion": "2025-09-14-655",
"Wrappers": [
{
"BundleGUID": "01184a0f7f1c00a9e28a6932cfbe1a4f",
@@ -215,10 +215,6 @@
"BundleGUID": "7cdae5f0ebfa5de1da41fb5c09c99067",
"FileName": "7cdae5f0ebfa5de1da41fb5c09c99067.bundle"
},
- {
- "BundleGUID": "808c5749e9d58b4510e99bfaf20051c1",
- "FileName": "808c5749e9d58b4510e99bfaf20051c1.bundle"
- },
{
"BundleGUID": "841bbbe552b1ec1bd00e171133dab21a",
"FileName": "841bbbe552b1ec1bd00e171133dab21a.bundle"
@@ -331,6 +327,10 @@
"BundleGUID": "e03614dd4c6ad7770669e29557b70dac",
"FileName": "e03614dd4c6ad7770669e29557b70dac.bundle"
},
+ {
+ "BundleGUID": "e346af9f6e3ca11a3a3f5dcd881d1cd7",
+ "FileName": "e346af9f6e3ca11a3a3f5dcd881d1cd7.bundle"
+ },
{
"BundleGUID": "e51760044ed310a548e29a10e5c9e6c3",
"FileName": "e51760044ed310a548e29a10e5c9e6c3.bundle"
diff --git a/Assets/StreamingAssets/yoo/DefaultPackage/DefaultPackage.version b/Assets/StreamingAssets/yoo/DefaultPackage/DefaultPackage.version
index 8e4af4b..aa8bf92 100644
--- a/Assets/StreamingAssets/yoo/DefaultPackage/DefaultPackage.version
+++ b/Assets/StreamingAssets/yoo/DefaultPackage/DefaultPackage.version
@@ -1 +1 @@
-2025-09-13-1017
\ No newline at end of file
+2025-09-14-655
\ No newline at end of file
diff --git a/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.bytes b/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.bytes
new file mode 100644
index 0000000..1c8e7b8
Binary files /dev/null and b/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.bytes differ
diff --git a/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.hash b/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.hash
new file mode 100644
index 0000000..5e38c33
--- /dev/null
+++ b/yoo/DefaultPackage/ManifestFiles/DefaultPackage_2025-09-14-655.hash
@@ -0,0 +1 @@
+4198c757
\ No newline at end of file