Unity设计模式 (unity设置中文)
本文目录导航:
Unity设计模式-状态模式
在设计RTS游戏中的我方单位逻辑时,我们可能会遇到大量复杂的判断。
例如,一个基本的单位控制脚本中,状态的多样性可能导致Update方法变得庞大且难以维护。
为了解决这个问题,可以引入状态模式,将单位划分为如待机、移动和攻击等几种状态,分别实现每个状态的Update方法。
状态模式的核心在于,当对象状态变化时,其行为也随之调整,但对象的类看起来并未改变。
在Unity中,我们可以通过继承一个基类并重写Update方法来管理状态,通过切换状态对象来控制单位的行为。
这样,控制器只需要维护一个状态对象的列表,而不需要处理复杂的逻辑判断。
状态模式在Unity中的应用体现在制作状态机,包括定义状态接口(如进入、更新和离开方法),以及状态机类负责管理状态列表和状态转换。
这种设计有助于提高代码的清晰度和可读性,特别适用于角色控制器和AI的设计。
总的来说,状态模式是游戏开发中常用的设计模式之一,它通过将状态相关的行为分解,使代码结构更加模块化,便于维护。
如果你对这方面的深入学习感兴趣,可以参考《HeadFirst-设计模式》和《大话设计模式》这两本书。

怎样设计自动机
状态机模式是一种行为模式,在《设计模式》这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑。
近日在看了一个开源系统时,看到了一个状态机的实现,也学着写了一个,与大家分享。
首先,分析一下一个普通的状态机究竟要实现哪些内容。
状态机存储从开始时刻到现在的变化,并根据当前输入,决定下一个状态。
这意味着,状态机要存储状态、获得输入(我们把它叫做跳转条件)、做出响应。
如上图所示,{s1, s2, s3}均为状态,箭头c1/a1表示在s1状态、输入为c1时,跳转到s2,并进行a1操作。
最下方为一组输入,状态机应做出如下反应:当前状态输入下一个状态动作s1c1s2a1s2c2s3a2s3c1s2a3s2c2s3a2s3c1s2a3s2c1s_trapa_traps_trapc1s_trapa_trap 当某个状态遇到不能识别的输入时,就默认进入陷阱状态,在陷阱状态中,不论遇到怎样的输入都不能跳出。
为了表达上面这个自动机,我们定义它们的状态和输入类型:
如何绘画状态机来描述业务变化
对于设计过商品、订单、优惠券等复杂功能的产品经理(PM)来说,描述清楚功能的本质会遇到挑战。
技术团队会不断追问:有几种状态?如何转移?何时转移?系统根据什么条件判断状态?这样的问题,往往是因为缺乏清晰的状态定义和转换规则。
本文将深入探讨如何使用状态机来描述业务变化,以及状态机的原理和应用方法。
为什么需要使用状态机?让我们从一个亲身经历的例子开始。
去年,我在设计电商系统的订单模块时,就遇到了上述问题。
最初,我参照淘宝的订单系统,将订单状态设计为待付款、已付款、已发货、已完成和已关闭等五种状态。
然而,上线后很快就发现了问题:付款之后直接传给仓库发货,导致很多订单信息有误时来不及修改;用户下单后想修改地址或商品,而发货信息已经传给仓库,修改起来非常困难。
因此,我们不得不新增了一个中间状态“已确认”,让客服审核无误后,再传给仓库进行发货流程。
随着业务的发展,我们又引入了退款退货功能,需要引入“退款中”状态,并且增加退款子状态机、退货子状态机。
这些变化最初是通过文字描述和流程图来表示的,但服务端的开发人员难以理解,不得不多次确认。
后来,我研究了状态机的概念,发现使用一张图就可以清晰地表示所有状态及转换条件,这极大地简化了沟通。
状态机的来源和发展状态机最早起源于电路设计领域,用于根据电路信号按照预设状态进行转移,协调相关信号动作并完成特定操作。
后来,这个概念被软件编程领域继承,用来表示有限多个状态以及在这些状态之间转移和动作的模型,称为有限状态机(FSM),是常见的软件设计模式之一。
对于产品经理来说,理解和应用状态机的概念,可以更好地阐述业务实体的功能本质,并让技术团队更容易理解。
如何定义状态机?从产品经理的角度来看,状态机是用来表示业务实体的所有状态以及相互间的转移关系的模型。
业务实体可以是客观上可以相互区分的事物,如订单、优惠券、商品等。
对于大部分对象,尽管存在状态的概念,但不一定需要画出状态机图。
在本文中,我们将重点探讨状态机的描述方法、常见状态机实例以及如何画出状态机。
状态机的描述方法文字描述是最古老的方法,但繁琐且不易理解。
表格可以更系统地描述状态和转换条件,但不够直观。
图形是最推荐的方法,通过圆角矩形表示状态,有向线条上的文字表示条件,线条的方向表示状态迁移。
一般从左向右画图表示初始到终止的顺序,无需特别标注。
常见状态机实例我们可以通过灯泡状态机和订单状态机等实例来理解状态机的基本概念。
灯泡状态机描述了电灯开关的简单状态迁移,而订单状态机则展示了网购过程中订单状态的复杂变化。
状态机的要素状态机的核心要素包括开始状态、终止状态和中间状态。
当达到终止状态,状态机停止。
在状态机中,条件和动作通常可以合并为一个描述,以明确状态迁移的具体条件。
命名时应站在用户立场,力求标准化。
如何画出状态机通常使用状态图工具如Axure来表示状态机。
在状态图中,“状态”用圆角矩形表示,“条件”用有向线条上的文字表示,线条的方向表示状态迁移。
状态图的起点和终点通常用实心圆圈表示。
在画图时,应去除无关状态,确保结构清晰,并考虑状态机的扩展性。
总结与思考并非所有的业务实体都需要产出状态机图,关键在于识别需要清晰定义状态转换的复杂功能。
在设计过程中,可以考虑京东小程序首页的领券功能、电商领域中优惠券功能模块等,尝试画出状态机图,以优化用户体验和业务流程。
此外,思考如何通过状态机图提升设计的可理解性和可维护性,对于提高团队协作效率具有重要意义。