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

推荐实现IGameInitializer这个接口的类写成sealed。

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同理。

最后更新于

这有帮助吗?