PC-20230316NUNE\Administrator ef1d3dfb2f 提交热更新
2024-10-15 18:26:52 +08:00

59 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Reflection;
using Cysharp.Threading.Tasks;
using SHFrame;
using UnityEngine;
using YooAsset;
namespace HotMain.SHGame.Procedure
{
public class ProcedureLoadHot : ProcedureBase
{
protected override void OnEnter(SHFrame.FSM.IFsm<IProcedureManager> procedureOwner)
{
base.OnEnter(procedureOwner);
MainLoad(procedureOwner).Forget();
}
private async UniTask MainLoad(SHFrame.FSM.IFsm<IProcedureManager> procedureOwner)
{
// 加载热更dll
foreach (var name in ProcedureInitializePackage.HotDllName)
{
await LoadHotfixDll(ProcedureInitializePackage.RawFilePackageName, name);
}
// 实例化热更新入口 执行游戏初始化配置表初始化、UI模块初始化、获取玩家数据之类的操作
ResourcePackage package = YooAssets.GetPackage(ProcedureInitializePackage.DefaultPackageName);
var go = await LoadGameObject(package, "HotPrefab");
go.name = $"Resource_{package.GetPackageVersion()}_{YooAssets.GetPackage(ProcedureInitializePackage.RawFilePackageName).GetPackageVersion()}";
Log.Warning($"Prefab name is {go.name}");
}
public static async UniTask<Assembly> LoadHotfixDll(string packageName, string name)
{
Log.Warning($"加载热更dll{name}");
var package = YooAssets.GetPackage(packageName);
var handle = package.LoadRawFileAsync(name);
await handle.ToUniTask();
var dllBytes = handle.GetRawFileData();
var assembly = Assembly.Load(dllBytes);
Log.Warning($"加载热更dll完成{name}");
return assembly;
}
/// <summary>
/// 异步加载GameObject
/// </summary>
/// <param name="package"></param>
/// <param name="assetNames">YooAsset中打包的资源名称</param>
/// <returns>返回GameObject</returns>
public static async UniTask<GameObject> LoadGameObject(ResourcePackage package, string assetNames)
{
var handle = package.LoadAssetAsync<GameObject>(assetNames);
await handle.ToUniTask();
return handle.InstantiateSync();
}
}
}