JisolGame/JNFrame2/Assets/HotMain/SHGame/Procedure/ProcedureInitPackage.cs

109 lines
4.2 KiB
C#
Raw Normal View History

2024-10-15 18:26:52 +08:00
using Cysharp.Threading.Tasks;
using HotMain.SHGame.YooAsset;
using HotMain.SHGame.YooAsset.StreamingAssetsHelper;
2024-10-14 20:31:57 +08:00
using SHFrame;
using SHFrame.FSM;
using YooAsset;
2024-10-15 18:26:52 +08:00
namespace HotMain.SHGame.Procedure
2024-10-14 20:31:57 +08:00
{
/// <summary>
/// 初始化资源包
/// </summary>
public class ProcedureInitializePackage : ProcedureBase
{
2024-10-16 20:41:40 +08:00
#if UNITY_EDITOR
public static EPlayMode PlayMode = EPlayMode.EditorSimulateMode;
#else
2024-10-15 18:26:52 +08:00
public static EPlayMode PlayMode = EPlayMode.HostPlayMode;
2024-10-16 20:41:40 +08:00
#endif
2024-10-14 20:31:57 +08:00
public static string RawFilePackageName = "RawFilePackage";
public static string DefaultPackageName = "DefaultPackage";
//热更新的dll名称
public static readonly string[] HotDllName =
{
2024-10-17 20:36:24 +08:00
"JNGame.Runtime.dll",
2024-10-16 02:48:23 +08:00
"HotSamples.dll",
2024-10-17 20:36:24 +08:00
"GameScripts.dll",
};
public static readonly string[] AotMetaAssemblyFiles =
{
"mscorlib.dll",
"System.dll",
"System.Core.dll",
};
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
2024-10-14 20:31:57 +08:00
{
base.OnEnter(procedureOwner);
InitPackage(procedureOwner).Forget();
}
private async UniTask InitPackage(IFsm<IProcedureManager> procedureOwner)
{
Log.Debug($"YooAssets 开始初始化");
// 1.初始化资源系统
YooAssets.Initialize();
var rawFilePackage = await InitYooPackage(RawFilePackageName, true);
var defaultPackage = await InitYooPackage(DefaultPackageName, false);
Log.Debug($"YooAssets 初始化完成");
// 设置该资源包为默认的资源包可以使用YooAssets相关加载接口加载该资源包内容。
YooAssets.SetDefaultPackage(defaultPackage);
// 切换到更新资源清单
ChangeState<ProcedureUpdatePackageManifest>(procedureOwner);
}
private async UniTask<ResourcePackage> InitYooPackage(string packageName, bool isRaw)
{
// 创建资源包
var package = YooAssets.TryGetPackage(packageName) ?? YooAssets.CreatePackage(packageName);
InitializationOperation initOperation = null;
switch (PlayMode)
{
case EPlayMode.EditorSimulateMode:
// 编辑器模拟模式
EDefaultBuildPipeline buildPipeline = isRaw ? EDefaultBuildPipeline.RawFileBuildPipeline : EDefaultBuildPipeline.ScriptableBuildPipeline;
var initParametersEditorSimulateMode = new EditorSimulateModeParameters
{
SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(buildPipeline, packageName)
};
2024-10-14 20:31:57 +08:00
initOperation = package.InitializeAsync(initParametersEditorSimulateMode);
break;
case EPlayMode.OfflinePlayMode:
// 单机模式
var initParametersOfflinePlayMode = new OfflinePlayModeParameters
2024-10-14 20:31:57 +08:00
{
DecryptionServices = new FileStreamDecryption()
2024-10-14 20:31:57 +08:00
};
initOperation = package.InitializeAsync(initParametersOfflinePlayMode);
2024-10-14 20:31:57 +08:00
break;
case EPlayMode.HostPlayMode:
2024-10-15 18:26:52 +08:00
//联机运行模式
// 注意GameQueryServices.cs 太空战机的脚本类详细见StreamingAssetsHelper.cs
string HostServer = $"http://ngame.jisol.cn/JNGame2/{packageName}";
var createParameters = new HostPlayModeParameters();
createParameters.DecryptionServices = new FileStreamDecryption();
createParameters.BuildinQueryServices = new GameQueryServices();
createParameters.RemoteServices = new RemoteServices(HostServer, HostServer);
initOperation = package.InitializeAsync(createParameters);
2024-10-14 20:31:57 +08:00
break;
}
await initOperation.ToUniTask();
2024-10-14 20:31:57 +08:00
return package;
}
}
}