流星

流星消逝的时候,光明已在望。黑暗无论多么长,光明迟早总是会来的。

状态机 有更新!

    抽空整理下状态机的实现,以及基本模块
    出去面试问我状态机相关的,都回答的不太好

    要说状态机,可以先介绍一下Unity的Animator组件
    Unity的Animator组件是控制角色动画切换时的状态控制组件

    他的核心由
    参数Parameters、在同一个Animator里的所有状态都可以访问
    其次是层默认都有Base Layer
    每层的N个状态,每一层当前只能处于一个状态
    每个状态拥有一系列转换到其他状态的[Transition]过渡或转换
    每个转换的条件,由Has Exit Time必须经过多久才允许转换/Settings设置/Conditions条件

    在每一帧中更新状态机的每一层
    每一层都拥有默认状态,在当前状态下,会检查能否发生转移的条件成立
    一旦成立,则切换到目的状态,如此往复,所有层混合的结果即为最终结果。

    总结起来,东西不多,有
    Parameters,StateLayer,States,Transition,Condition,
    每一个StateLayer拥有几个States
    每个States拥有几个Transition
    Transition拥有源状态和目的状态,以及Condition
    然后Condition使用的参数全部在Parameters里

    Animator控制器就是这样子
    但是通常,角色的状态机,拥有驱动角色发生状态改变的主调者
    这个一般作为状态控制器
    StateController,状态想由当前状态,切换到任意其他状态,都需要被驱动
    而StateController负责具体事务,对接到抽象框架上,这样每一个状态
    都由其对应的具体事务StateController驱动,这样就完成了整个抽象框架
    与具体事务间的统一。

    这些都是最近学习Outfit7的UI状态机框架自己理解的一些心得。
    在Outfit7的UI状态机框架里,每个具体的StateController
    还拥有一个指定的UiController负责控制这个状态时对应的界面控制器

    有了这个UI框架,要实现什么UI动画都非常方便。

    状态机需要配对相应的可视化编辑工具,否则仅有定义而无数据,一样是空壳

    更新
    状态机最开始时候会检查AnyState的每一个过渡,任何一个过渡里的条件满足
    都会导致当前状态切换到目的状态
    AnyState意思就是无论在什么状态内,都能进行状态切换的。

    validate