[GameFramework]教程08-Procedure的前世今生

本文探讨了GameFramework中Procedure的实现原理,包括ProcedureComponent如何生成Procedure子类实例,以及执行流程。通过分析源码,揭示了m_AvailableProcedureTypeNames和m_EntranceProcedureTypeName的作用,并解释了如何获取所有继承自ProcedureBase的子类。同时,文章还介绍了Procedure的执行顺序,重点讲解了Start方法中m_ProcedureManager的Initialize和StartProcedure在启动状态机过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过前几节的学习,估计大家对Procedure与Fsm已经有了一定的了解,下面我们对Procedure进行初步的深入(说的有点大,就是看源码)

首先有几个问题是我比较困惑的:

1. Game Framework -> Procedure ->Procedure Component 下的各个继承自ProcedureBase的子类,是如何生成的?

跟随镜头,首先参观一下ProcedureComponent,没错,这就是我们在IDE中看到的那个脚本

[SerializeField]
private string[] m_AvailableProcedureTypeNames = null;

[SerializeField]
private string m_EntranceProcedureTypeName = null;

这两个参数,从字面意思就可以看出,m_AvailableProcedureTypeNames 为当前有效的Procedure,m_EntranceProcedureTypeName 也就是我们运行游戏第一个进入的Procedure。

然后本人看了一遍代码后,发现并没有实际能够取出所有Procedure的子类的东东,这是为何?最大函数也就是Start,这个我们后续再讲。(全局搜索吧!!m_AvailableProcedureTypeNames )

发现了ProcedureComponentInspector这个代码里竟然出现了!!(什么鬼?)

主意两个函数:

protected override void OnCompileComplete()
{
      base.OnCompileComplete();
      RefreshTypeNames();
}

private void OnEnable()
{
  
    m_AvailableProcedureTypeNames = serializedObject.FindProperty("m_AvailableProcedureTypeNames");
    m_EntranceProcedureTypeName = serializedObject.FindProperty("m_EntranceProcedureTypeName");
    RefreshTypeNames();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值