using Cysharp.Threading.Tasks; using SHFrame; using SHFrame.FSM; using YooAsset; namespace HotMain.SHGame.Procedure { /// <summary> /// 更新资源清单 /// </summary> public class ProcedureUpdatePackageManifest : ProcedureBase { protected override void OnEnter(IFsm<IProcedureManager> procedureOwner) { base.OnEnter(procedureOwner); UpdateManifest(procedureOwner).Forget(); } private async UniTask UpdateManifest(IFsm<IProcedureManager> procedureOwner) { bool result = await UpdatePackageManifest(ProcedureInitializePackage.RawFilePackageName); if (!result) return; result = await UpdatePackageManifest(ProcedureInitializePackage.DefaultPackageName); if (!result) return; //切换到更新资源版本 ChangeState<ProcedureUpdatePackageVersion>(procedureOwner); } /// <summary> /// 更新资源清单 /// </summary> /// <returns></returns> private async UniTask<bool> 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; } } }