PC-20230316NUNE\Administrator 6da2f9e691 提交
2024-10-16 20:41:40 +08:00

59 lines
2.2 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);
}
//热更新完成
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();
}
}
}