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();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|