using Cysharp.Threading.Tasks; using SHFrame; using SHFrame.FSM; using YooAsset; namespace HotMain.SHGame.Procedure { /// /// 更新资源清单 /// public class ProcedureUpdatePackageManifest : ProcedureBase { protected override void OnEnter(IFsm procedureOwner) { base.OnEnter(procedureOwner); UpdateManifest(procedureOwner).Forget(); } private async UniTask UpdateManifest(IFsm procedureOwner) { bool result = await UpdatePackageManifest(ProcedureInitializePackage.RawFilePackageName); if (!result) return; result = await UpdatePackageManifest(ProcedureInitializePackage.DefaultPackageName); if (!result) return; //切换到更新资源版本 ChangeState(procedureOwner); } /// /// 更新资源清单 /// /// private async UniTask UpdatePackageManifest(string packageName) { ResourcePackage package = YooAssets.GetPackage(packageName); //2.获取资源版本 UpdatePackageVersionOperation updateVerOperation = package.UpdatePackageVersionAsync(false); await updateVerOperation.ToUniTask(); // TODO 如果初始化失败弹出提示界面 if (updateVerOperation.Status != EOperationStatus.Succeed) { //初始化失败了 弹出提示 Log.Error($"{package.PackageName} 获取远程资源版本信息失败: {updateVerOperation.Error}"); return false; } string packageVersion = updateVerOperation.PackageVersion; Log.Debug($"Init {package.PackageName} version : {packageVersion}"); //3.更新补丁清单 UpdatePackageManifestOperation updateManifestOperation = package.UpdatePackageManifestAsync(packageVersion); await updateManifestOperation.ToUniTask(); if (updateManifestOperation.Status != EOperationStatus.Succeed) { //更新失败了 弹出提示 Log.Error($"{package.PackageName} 更新资源版本清单失败: {updateManifestOperation.Error}"); return false; } return true; } } }