Files
plugin-library/Assets/Main/HotfixUpdateScript/Runtime/HotUpdate/Init/Fsm/ResUpdateLocalState.cs

144 lines
4.7 KiB
C#
Raw Normal View History

2025-05-23 18:26:47 +08:00
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Assertions;
using YooAsset;
namespace Stary.Evo
{
public class ResUpdateLocalState : AbstractFSMIState
{
public ResUpdateLocalState(IFsmSystem system) : base(system)
{
}
2025-07-02 10:05:26 +08:00
public override async UniTask OnEnterAsync()
2025-05-23 18:26:47 +08:00
{
2025-07-02 10:05:26 +08:00
//初始化读取资源配置表
2025-05-30 14:50:46 +08:00
var package = YooAssets.GetPackage(AppConfig.PackageDomainName);
2025-05-23 18:26:47 +08:00
//更新失败
Debug.Log($"UnityEvo:切换为加载本地缓存资源...");
2025-05-30 14:50:46 +08:00
string packageVersion = "";
if (package.PackageName.Equals("Main"))
2025-05-23 18:26:47 +08:00
{
2025-05-30 14:50:46 +08:00
var operation = package.RequestPackageVersionAsync();
await operation;
if (operation.Status == EOperationStatus.Succeed)
{
//更新成功
packageVersion = operation.PackageVersion;
Debug.Log($"Unity:【Main】Request package Version : {packageVersion}");
}
else
{
//更新失败
2025-07-02 10:05:26 +08:00
Debug.LogError("Unity:【Main】" + operation.Error);
2025-05-30 14:50:46 +08:00
}
2025-05-23 18:26:47 +08:00
}
2025-05-30 14:50:46 +08:00
else
{
// 获取上次成功记录的版本
packageVersion = PlayerPrefs.GetString($"{AppConfig.PackageDomainName}_GAME_VERSION", string.Empty);
if (string.IsNullOrEmpty(packageVersion))
{
Debug.Log($"UnityEvo:没有找到本地版本记录,需要更新资源!");
return;
}
}
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
Debug.Log($"UnityEvo:获取资源版本 Version : 【{packageVersion}】");
Debug.Log($"UnityEvo:开始加载本地资源...");
// 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}】");
return;
}
Assert.AreEqual(EOperationStatus.Succeed, updateManifestOp.Status);
//4.下载补丁包
await Download();
//加载热更配置文件
var loadHotfixSettingsOp = package.LoadAssetAsync<DomainConfig>("Config_DomainConfig");
await loadHotfixSettingsOp;
DomainConfig domainConfig = null;
if (loadHotfixSettingsOp.Status == EOperationStatus.Succeed)
{
//更新成功
Debug.Log($"UnityEvo:加载热更配置文件 DomainConfig : 【成功】");
2025-07-02 10:05:26 +08:00
domainConfig = loadHotfixSettingsOp.AssetObject as DomainConfig;
2025-05-23 18:26:47 +08:00
}
else
{
Debug.LogError($"UnityEvo:加载热更配置文件 DomainConfig : 【失败】");
}
2025-07-02 10:05:26 +08:00
if (domainConfig == null)
2025-05-23 18:26:47 +08:00
{
2025-07-02 10:05:26 +08:00
Debug.LogError($"UnityEvo:【{package.PackageName}】加载DomainConfig为空无法继续执行后续流程请检查");
2025-05-23 18:26:47 +08:00
}
2025-07-02 10:05:26 +08:00
FsmSystem.SetCurState(nameof(HotFixState), domainConfig);
2025-05-23 18:26:47 +08:00
}
2025-07-02 10:05:26 +08:00
public override UniTask OnEnterAsync<T>(T param)
2025-05-23 18:26:47 +08:00
{
return UniTask.CompletedTask;
}
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
public override UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
{
return UniTask.CompletedTask;
}
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
public override void OnUpdate()
{
base.OnUpdate();
}
2025-07-02 10:05:26 +08:00
2025-05-23 18:26:47 +08:00
public override UniTask OnExitAsync()
{
2025-07-02 10:05:26 +08:00
return UniTask.CompletedTask;
2025-05-23 18:26:47 +08:00
}
#region
public async UniTask Download()
{
int downloadingMaxNum = 1;
int failedTryAgain = 1;
2025-05-30 14:50:46 +08:00
var package = YooAssets.GetPackage(AppConfig.PackageDomainName);
2025-05-23 18:26:47 +08:00
var downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain);
// 在正常开始游戏之前,还需要验证本地清单内容的完整性。
if (downloader.TotalDownloadCount > 0)
{
Debug.Log("UnityEvo:资源内容本地并不完整,需要更新资源!");
return;
}
}
#endregion
}
}