IGameInitializer
IGameInitializer的简要介绍见: IGameInitializer
从模板创建
在Project内选一个文件夹,右键菜单点击:Create/VMFramework Script Template/Game Initializer。
示例
下面是一个自定义游戏加载器(GameInitializer)的示例,类名PlayerInitializer标志着这是一个玩家加载器,比如可以在里面写客户端申请向服务端创建一个玩家等等...
https://github.com/VMware233/VMFramework/blob/main/Assets/Examples/Procedure/PlayerInitializer.cs
using System;
using System.Collections.Generic;
using UnityEngine.Scripting;
using VMFramework.Procedure;
namespace VMFramework.Examples
{
[GameInitializerRegister(ClientRunningProcedure.ID, ProcedureLoadingType.OnEnter)]
[Preserve]
public sealed class PlayerInitializer : IGameInitializer
{
void IInitializer.GetInitializationActions(ICollection<InitializationAction> actions)
{
actions.Add(new InitializationAction(InitializationOrder.PostInit, OnPostInit, this));
}
private void OnPostInit(Action onDone)
{
// Do something with the player here.
// Call the onDone callback to signal that the initialization is done.
onDone();
}
}
}
请务必加上GameInitializerRegister这个Attribute,否则不会被框架识别。
请在函数的最后调用onDone(),否则这个加载未完成的话会导致游戏加载过程卡住不动。
https://github.com/VMware233/VMFramework/blob/main/Assets/VMFramework/Main/Procedures/Initializer/GameInitializer/GameInitializerRegister.cs
using System;
namespace VMFramework.Procedure
{
[AttributeUsage(AttributeTargets.Class)]
public sealed class GameInitializerRegister : Attribute
{
public readonly string ProcedureID;
public readonly ProcedureLoadingType LoadingType;
public GameInitializerRegister(string procedureID, ProcedureLoadingType loadingType)
{
ProcedureID = procedureID;
LoadingType = loadingType;
}
}
}
https://github.com/VMware233/VMFramework/blob/main/Assets/VMFramework/Main/Procedures/ProcedureManager/ProcedureLoadingType.cs#L3
public enum ProcedureLoadingType
OnEnter和OnExit示意
如上图所示,当从流程A切换到流程B时,会先调用挂在流程A上的OnExit的一系列GameInitializer,然后调用挂在流程B上的OnEnter的一系列GameInitializer。
从流程B切换到流程A同理。
最后更新于
这有帮助吗?