mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 11:24:46 +00:00
59 lines
2.2 KiB
C#
59 lines
2.2 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);
|
||
}
|
||
|
||
//热更新完成
|
||
ResourcePackage package = YooAssets.GetPackage(ProcedureInitializePackage.DefaultPackageName);
|
||
var go = await LoadGameObject(package, "HotGameMain");
|
||
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();
|
||
}
|
||
|
||
}
|
||
} |