前言
本文的创作目的是总结工作中累积的经验和成果,并通过写教学文章的方式进行巩固和查漏补缺,在不足之处加以改进,工作时由于时间原因没有实现的一些设计也会借这次机会进行补完。我会在写文章的过程中和读者一起从新开始搭建和优化一个状态机系统以及一个应用案例,希望可以和读者共同学习进步。
章节目录
Unity通用有限状态机的从零搭建手册(一):阵前磨枪
Unity通用有限状态机的从零搭建手册(二):凿地筑基
Unity通用有限状态机的从零搭建手册(三):雏形初见
Unity通用有限状态机的从零搭建手册(四):优化漫漫(1)
Unity通用有限状态机的从零搭建手册(五):优化漫漫(2)
Unity通用有限状态机的从零搭建手册(六):优化漫漫(3)
Unity通用有限状态机的从零搭建手册(七):新的挑战
Unity通用有限状态机的从零搭建手册(八):最终试炼
项目地址
StarryJamFSM
有限状态机简介
有限状态机,英文全程Finate State Machine,定义为“表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型”(来自维基百科)。
先来看一下有限状态机的四个组成要素和三个特征。
四个要素:
现态:指当前所处状态
条件:会触发状态变更的事件
动作:状态迁入、迁出、保持时的行为
次态:条件所对应的目标状态
三个特征:
1. 状态总数有限;
2. 任一时刻只处在一种状态之中;
3. 在条件达成时会从现态转移到对应次态。
总的来说,状态机是一种抽象一个对象的不同状态下的行为和状态之间切换的建模工具,他在软件工程当中被广泛运用。我从事的是游戏开发,在游戏开发的过程中可以很明显地感觉到随着需求的迭代,游戏中的各种角色、AI的逻辑变得越来越复杂,诸如在跳跃时是否能攻击,奔跑时攻击是否和站立攻击方式有所不同,敌人何时开始追击在玩家离开多远之后归位等一系列逻辑,仅靠最简单的if-else语句不但难以将不同状态之间的关系表达清楚,更重要的是在需求变动的时候要改动之前的代码将根本无从下手。在那个时候我就决定给项目中引入有限状态机来给不同的状态以及他们的转换条件做解耦,以便于日后的迭代和维护。当你发现一个类在处理逻辑时明显和当前状态相关,状态之间有明显的界限,且状况复杂时,就该考虑使用有限状态机了。
前期梳理
在开始码代码之前,先梳理一下我们需要构建的几个重要类的职责。
状态机类(FiniteStateMachine):具体类; 负责添加、删除状态,以及状态的更新和转换。
状态类(State):抽象类; 抽象出切入、切出、持续时的行为接口,由子类完成具体的行为逻辑;
条件类(Condition): 抽象类;抽象出条件判断的接口,由子类完成具体的判断逻辑。文章来源:https://www.toymoban.com/news/detail-431155.html
了解完几个重要类的职责之后我们就开始着手搭建框架吧!文章来源地址https://www.toymoban.com/news/detail-431155.html
到了这里,关于Unity通用有限状态机的从零搭建手册(一):阵前磨枪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!