mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 11:24:46 +00:00
59 lines
2.3 KiB
C#
59 lines
2.3 KiB
C#
|
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();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|