AlicizaX/Client/Assets/Books/Framework/Runtime/Procedure.md
2026-04-01 13:20:06 +08:00

2.0 KiB

Procedure

模块概述

Procedure 模块用于组织游戏主流程,如启动、登录、主城、战斗、结算等状态切换。它以 ProcedureBase 为模板方法基类,把生命周期拆成初始化、进入、离开、更新、销毁。

快速开始

  1. 挂载 ProcedureComponent
  2. 定义多个继承 ProcedureBase 的流程
  3. 调用 InitializeProcedure
  4. 通过 SwitchProcedure<T>() 切换

架构说明

ProcedureComponent
  └─ ProcedureService
      ├─ IProcedure
      └─ ProcedureBase

核心类与接口

IProcedureService

公开能力:

  • CurrentProcedureType
  • InitializeProcedure(...)
  • ClearAllProcedures()
  • ContainsProcedure(Type procedureType)
  • TrySwitchProcedure(Type procedureType)

ProcedureBase

生命周期模板:

  • OnInit()
  • OnEnter()
  • OnLeave()
  • OnUpdate()
  • OnDestroy()

API 参考

InitializeProcedure(IEnumerable<IProcedure> availableProcedures, Type defaultProcedureType)

  • 必填参数:availableProcedures
  • 必填参数:defaultProcedureType
  • 返回值:无

TrySwitchProcedure(Type procedureType)

  • 必填参数:procedureType
  • 返回值:bool

CurrentProcedureType

  • 返回值:Type

完整使用示例

using System;
using AlicizaX;

public sealed class BootProcedure : ProcedureBase
{
    protected override void OnEnter()
    {
        SwitchProcedure<LoginProcedure>();
    }
}

public sealed class LoginProcedure : ProcedureBase
{
    protected override void OnEnter()
    {
        Log.Info("Enter LoginProcedure");
    }
}

public sealed class ProcedureExample
{
    public void Initialize()
    {
        GameApp.Procedure.InitializeProcedure(
            new IProcedure[] { new BootProcedure(), new LoginProcedure() },
            typeof(BootProcedure));
    }
}

最佳实践

  • 一个流程只负责一个清晰状态
  • 初始化逻辑放 OnInit,进入/退出逻辑放 OnEnter / OnLeave

常见错误

  • 未初始化就切换流程
  • 把长时间并行任务塞入流程本身