2025-07-02 10:05:26 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.Assertions;
|
|
|
|
|
|
using YooAsset;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Stary.Evo
|
|
|
|
|
|
{
|
2025-10-31 11:18:23 +08:00
|
|
|
|
public class ResEditorSimulateState : AbstractFSMIStateAsync
|
2025-07-02 10:05:26 +08:00
|
|
|
|
{
|
2025-10-31 11:18:23 +08:00
|
|
|
|
public ResEditorSimulateState(IFsmSystemAsync system) : base(system)
|
2025-07-02 10:05:26 +08:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override async UniTask OnEnterAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log("UnityEvo:开始资源更新...");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //初始化读取资源配置表
|
|
|
|
|
|
var package = YooAssets.GetPackage(AppConfig.PackageDomainName);
|
|
|
|
|
|
// 请求资源版本
|
|
|
|
|
|
var requetVersionOp = package.RequestPackageVersionAsync();
|
|
|
|
|
|
await requetVersionOp;
|
|
|
|
|
|
string packageVersion = "";
|
|
|
|
|
|
if (requetVersionOp.Status == EOperationStatus.Succeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
//更新成功
|
|
|
|
|
|
packageVersion = requetVersionOp.PackageVersion;
|
2026-01-07 18:20:13 +08:00
|
|
|
|
CustomPlayerPrefs.SetString($"{AppConfig.PackageDomainName}_GAME_VERSION", packageVersion);
|
2025-07-02 10:05:26 +08:00
|
|
|
|
Debug.Log($"UnityEvo:获取资源版本 Version : 【{packageVersion}】");
|
|
|
|
|
|
Debug.Log($"UnityEvo:开始加载服务器资源...");
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:获取资源版本失败: 【{requetVersionOp.Error}】");
|
2026-01-07 18:20:13 +08:00
|
|
|
|
//FsmSystem.SetCurState(nameof(ResUpdateLocalState));
|
2025-07-02 10:05:26 +08:00
|
|
|
|
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();
|
|
|
|
|
|
|
2026-01-08 12:25:29 +08:00
|
|
|
|
if (AppConfig.DeveloperMode)
|
2025-07-02 10:05:26 +08:00
|
|
|
|
{
|
2026-01-07 18:20:13 +08:00
|
|
|
|
//加载热更配置文件
|
|
|
|
|
|
var loadHotfixSettingsOp = package.LoadAssetAsync<DomainConfig>("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 (domainConfig == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:【{package.PackageName}】加载DomainConfig为空,无法继续执行后续流程,请检查!!!");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FsmSystem.SetCurState(nameof(HotFixDllState), domainConfig);
|
2025-07-02 10:05:26 +08:00
|
|
|
|
}
|
2026-01-07 18:20:13 +08:00
|
|
|
|
else if (HybridClREntrance.Global.stage == StageType.Originality)
|
2025-07-02 10:05:26 +08:00
|
|
|
|
{
|
2026-01-07 18:20:13 +08:00
|
|
|
|
//加载热更配置文件
|
|
|
|
|
|
var loadArtSceneDataOp = package.LoadAssetAsync<ArtSceneData>("Config_ArtSceneData");
|
|
|
|
|
|
await loadArtSceneDataOp;
|
|
|
|
|
|
ArtSceneData artSceneData = null;
|
|
|
|
|
|
if (loadArtSceneDataOp.Status == EOperationStatus.Succeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
//更新成功
|
|
|
|
|
|
Debug.Log($"UnityEvo:加载热更配置文件 ArtSceneData : 【成功】");
|
|
|
|
|
|
artSceneData = loadArtSceneDataOp.AssetObject as ArtSceneData;
|
|
|
|
|
|
await FsmSystem.SetCurState(nameof(ResStartState), null);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:加载热更配置文件 ArtSceneData : 【失败】");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (artSceneData == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"UnityEvo:【{package.PackageName}】加载ArtSceneData为空,无法继续执行后续流程,请检查!!!");
|
|
|
|
|
|
}
|
2025-07-02 10:05:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override UniTask OnEnterAsync<T>(T param)
|
|
|
|
|
|
{
|
|
|
|
|
|
return UniTask.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override UniTask OnEnterAsync<T1, T2>(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()
|
|
|
|
|
|
{
|
|
|
|
|
|
int downloadingMaxNum = 10;
|
|
|
|
|
|
int failedTryAgain = 3;
|
|
|
|
|
|
var package = YooAssets.GetPackage(AppConfig.PackageDomainName);
|
|
|
|
|
|
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插件的修改===================================
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 开始下载
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void OnStartDownloadFileFunction(DownloadFileData downloadFileData)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log(
|
|
|
|
|
|
$"UnityEvo:开始下载:文件名:{downloadFileData.FileName},文件大小:{downloadFileData.FileSize / 1024f / 1024f} MB");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下载完成
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void OnDownloadOverFunction(DownloaderFinishData downloaderFinishData)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log("UnityEvo:下载" + (downloaderFinishData.Succeed ? "成功" : "失败"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新中
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void OnDownloadProgressUpdateFunction(DownloadUpdateData downloadUpdateData)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log(
|
|
|
|
|
|
$"UnityEvo:文件总数:{downloadUpdateData.TotalDownloadCount},已下载文件数:{downloadUpdateData.CurrentDownloadCount},下载总大小:{downloadUpdateData.TotalDownloadBytes / 1024f / 1024f} MB,已下载大小{downloadUpdateData.CurrentDownloadBytes / 1024f / 1024f} MB");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下载出错
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="errorData"></param>
|
|
|
|
|
|
private void OnDownloadErrorFunction(DownloadErrorData errorData)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log($"UnityEvo:下载出错:包名:{errorData.PackageName} 文件名:{errorData.FileName},错误信息:{errorData.ErrorInfo}");
|
|
|
|
|
|
}
|
|
|
|
|
|
//===================================适应新版本YooAsset插件的修改===================================
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|