using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Assertions; using YooAsset; namespace Stary.Evo { public class ResUpdateServerState : AbstractFSMIState { public ResUpdateServerState(IFsmSystem system) : base(system) { } public override async UniTask OnEnterAsync() { Debug.Log("UnityEvo:开始资源更新..."); // //初始化读取资源配置表 var package = YooAssets.GetPackage(AppConfig.ASSETPACKGENAME); // 请求资源版本 var requetVersionOp = package.RequestPackageVersionAsync(); await requetVersionOp; string packageVersion = ""; if (requetVersionOp.Status == EOperationStatus.Succeed) { //更新成功 packageVersion = requetVersionOp.PackageVersion; PlayerPrefs.SetString("GAME_VERSION", packageVersion); Debug.Log($"UnityEvo:获取资源版本 Version : 【{packageVersion}】"); Debug.Log($"UnityEvo:开始加载服务器资源..."); } else { Debug.LogError($"UnityEvo:获取资源版本失败: 【{requetVersionOp.Error}】"); FsmSystem.SetCurState(nameof(ResUpdateLocalState)); return; } // Assert.AreEqual(EOperationStatus.Succeed, requetVersionOp.Status); // 更新资源清单 var updateManifestOp = package.UpdatePackageManifestAsync(packageVersion); await updateManifestOp; if (updateManifestOp.Status == EOperationStatus.Succeed) { //更新成功 Debug.Log($"UnityEvo:更新资源清单 updateManifest : 【成功】"); } else { //更新失败 Debug.LogError($"UnityEvo:更新资源清单失败: 【{updateManifestOp.Error}】"); } Assert.AreEqual(EOperationStatus.Succeed, updateManifestOp.Status); //4.下载补丁包 await Download(); //加载热更配置文件 var loadHotfixSettingsOp = package.LoadAssetAsync("Config_DomainConfig"); await loadHotfixSettingsOp; DomainConfig domainConfig = null; if (loadHotfixSettingsOp.Status == EOperationStatus.Succeed) { //更新成功 Debug.Log($"UnityEvo:加载热更配置文件 loadHotfixSettings : 【成功】"); domainConfig = loadHotfixSettingsOp.AssetObject as DomainConfig; } else { Debug.LogError($"UnityEvo:加载热更配置文件 loadHotfixSettings : 【失败】"); } if (package.PackageName.Equals("Main")) { FsmSystem.SetCurState(nameof(LoadResMainState)); } else { if (domainConfig == null) { Debug.LogError($"UnityEvo:【{package.PackageName}】加载DomainConfig为空,无法继续执行后续流程,请检查!!!"); } FsmSystem.SetCurState(nameof(HotFixState), domainConfig); } } public override UniTask OnEnterAsync(T param) { return UniTask.CompletedTask; } public override UniTask OnEnterAsync(T1 param1, T2 param2) { return UniTask.CompletedTask; } public override void OnUpdate() { base.OnUpdate(); } public override UniTask OnExitAsync() { return UniTask.CompletedTask; } #region 下载热更资源 public async UniTask Download() { // 在任意MonoBehaviour或DomainBase派生类中 string[] andUnzipAsyncPath= await ZipTool.DownloadAndUnzipAsync( $"{AppConfig.IPCONFIG}/XOSMOPlug_inLibrary/{AppConfig.ASSETPACKGENAME}/Android/1.0.5/X_02_01_1.0.5.zip", Application.persistentDataPath + "/DownloadedContent", progress => Debug.Log($"下载进度:{progress:P0}"), progress => Debug.Log($"解压进度:{progress:P0}") ); var package = YooAssets.GetPackage(AppConfig.ASSETPACKGENAME); var downloader = package.CreateResourceImporter(andUnzipAsyncPath, 3, 3); // int downloadingMaxNum = 10; // int failedTryAgain = 3; // var package = YooAssets.GetPackage(AppConfig.ASSETPACKGENAME); // var downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain); // //没有需要下载的资源 // if (downloader.TotalDownloadCount == 0) // { // Debug.Log("UnityEvo:没有需要下载的资源,跳过更新"); // return; // } // // //需要下载的文件总数和总大小 // int totalDownloadCount = downloader.TotalDownloadCount; // long totalDownloadBytes = downloader.TotalDownloadBytes; // Debug.Log($"UnityEvo:需要下载的资源的个数【{totalDownloadCount}】,需要下载的资源的总大小{totalDownloadBytes/1024} MB"); // //===================================适应新版本YooAsset插件的修改=================================== // //注册回调方法 // downloader.DownloadErrorCallback = OnDownloadErrorFunction; // downloader.DownloadUpdateCallback = OnDownloadProgressUpdateFunction; // downloader.DownloadFinishCallback = OnDownloadOverFunction; // downloader.DownloadFileBeginCallback = OnStartDownloadFileFunction; // //===================================适应新版本YooAsset插件的修改=================================== // // //开启下载 // downloader.BeginDownload(); await downloader; //检测下载结果 if (downloader.Status == EOperationStatus.Succeed) { //下载成功 Debug.Log("UnityEvo:资源更新完成"); } else { //下载失败 Debug.Log("UnityEvo:资源更新失败"); } } //===================================适应新版本YooAsset插件的修改=================================== /// /// 开始下载 /// private void OnStartDownloadFileFunction(DownloadFileData downloadFileData) { Debug.Log($"UnityEvo:开始下载:文件名:{downloadFileData.FileName},文件大小:{downloadFileData.FileSize/1024f/1024f} MB"); } /// /// 下载完成 /// private void OnDownloadOverFunction(DownloaderFinishData downloaderFinishData) { Debug.Log("UnityEvo:下载" + (downloaderFinishData.Succeed ? "成功" : "失败")); } /// /// 更新中 /// private void OnDownloadProgressUpdateFunction(DownloadUpdateData downloadUpdateData) { Debug.Log($"UnityEvo:文件总数:{downloadUpdateData.TotalDownloadCount},已下载文件数:{downloadUpdateData.CurrentDownloadCount},下载总大小:{downloadUpdateData.TotalDownloadBytes/1024f/1024f} MB,已下载大小{downloadUpdateData.CurrentDownloadBytes/1024f/1024f} MB"); } /// /// 下载出错 /// /// private void OnDownloadErrorFunction(DownloadErrorData errorData) { Debug.Log($"UnityEvo:下载出错:包名:{errorData.PackageName} 文件名:{errorData.FileName},错误信息:{errorData.ErrorInfo}"); } //===================================适应新版本YooAsset插件的修改=================================== #endregion } }