59 lines
2.2 KiB
C#
Raw Normal View History

2024-10-15 18:26:52 +08:00
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);
}
2024-10-16 20:41:40 +08:00
//热更新完成
2024-10-15 18:26:52 +08:00
ResourcePackage package = YooAssets.GetPackage(ProcedureInitializePackage.DefaultPackageName);
2024-10-16 20:41:40 +08:00
var go = await LoadGameObject(package, "HotGameMain");
2024-10-15 18:26:52 +08:00
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();
}
}
}