近几年随着低代码与无代码相关话题的火热,逻辑编排作为其重要构成部分也备受关注,集团内外不乏优秀的实践。之前在做技术调研时发现了不少业内逻辑编排相关的方案,陆续整理记录下来。今天先为大家带来游戏开发领域内的 PlayMaker。
01是什么▐ 有限状态机(Finite State Machine,FSM)PlayMaker 中的状态机一个完整的例子StateTransitionTransition 表明了状态间的跳转。当某事件触发时,当前激活的 State 退出,进入新的 State。通过改变连线就可以改变状态机之间的跳转逻辑。状态机可视化后,使得 Transition 的构建和调试变得更容易。Event事件会触发当前状态跳转到下一个状态,所有的状态跳转都是依赖事件触发的。事件可以既可以来自 Unity 的脚本或者组件,例如应用级和一些通用的事件,如应用运行、暂停、退出,碰撞的进入、停留、离开,关卡载入,鼠标的点击、拖拽、进入、退出,触发器的触发、停止等。也可以来自 PlayMaker 自己的 Action。开始事件(Start Event)是 PlayMaker 状态机的第一个事件(START 是一个系统事件),当 FSM 组件激活时,开始事件会调用,它所指向的状态即为状态机的第一个状态。“FINISHED”也是一个系统事件,代表“本状态已经执行完所有操作的意思。普通的Event只能在Fsm内部被触发,而 Global Event 可以从 FSM 外部被触发。ActionVariables在 PlayMaker 中,一个 Action 定义的参数,可以像编辑其他 UI 的控件或者 Unity 的组件参数一样,填一个具体的值,也可以使用一个变量,而这个变量可以是另一个Action操作的结果,也可以是其他代码中传给 PlayMaker 的某个值。PlayMaker 将游戏中的物体行为划分为多个步骤组成的序列,通过事件在不同状态间进行切换。如果把行为中的每一个步骤都称为一个状态(State),那么整个行为就可以通过把多个状态相互连接来表示。这些状态之间的连接,也就是从一个状态跳转至另一个状态的转换事件(Transition)。而这种把多个状态连接到一起、共同表现游戏对象的某种行为的方式,就被称为有限状态机。所以 FSM 描述的就是这种行为到底应该按照什么步骤来执行。进一步,对于每一个步骤来说,又可以继续向下细分为一系列 的动作(Action) 。这种由 Action-State-Transition-FSM 构成的描述逻辑,正是 PlayMaker 替代程序、控制 Unity 中游戏对象的基础。▐ 编辑器能力编辑器Template调试▐ 扩展开放能力PlayMaker 的扩展开放能力主要体现在以下两点:1、PlayMaker 中的 Action 支持使用 C# 自定义开发2、其他代码可以直接与 PlayMaker 进行交互设计实现复杂的算法,封装成为 PlayMaker Action,然后交由策划或美术来使用。但是也应考虑到 PlayMaker 完全基于状态机这种“策略”,也会带来 Action 这个适配层的开发成本。02为什么▐ 从技术角度▐ 从协作角度▐ 不适用场景03启示▐ 解决问题的策略
PlayMaker 是 Unity 环境下的第三方可视化状态机编辑器与运行时,由 Hutong Games 开发,发布于 2011 年,通过 Unity 资源商店供广大开发者下载使用,是商店中下载最多的付费工具。PlayMaker 经历战火考验,有着不少经典案例,《炉石传说》《Inside》《Hollow Knight》《看火人》等一众优秀游戏都使用到了 PlayMaker 。
本文主要围绕以下话题展开:
-
PlayMaker 是什么? -
PlayMaker 为什么受欢迎? -
我们从中能得到什么启发?
01
是什么
▐ 有限状态机(Finite State Machine,FSM)
有限状态机又称有限状态自动机(finite-state automation,缩写:FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。——有限状态机 Wikipedia。
-
状态的总数是有限的 -
状态机同一时刻只能处于一种状态 -
某种条件下,会从一种状态转变到另一种状态
-
PlayMaker 中的状态机
一个完整的例子
State
Transition
Transition 表明了状态间的跳转。当某事件触发时,当前激活的 State 退出,进入新的 State。通过改变连线就可以改变状态机之间的跳转逻辑。状态机可视化后,使得 Transition 的构建和调试变得更容易。
Event
事件会触发当前状态跳转到下一个状态,所有的状态跳转都是依赖事件触发的。事件可以既可以来自 Unity 的脚本或者组件,例如应用级和一些通用的事件,如应用运行、暂停、退出,碰撞的进入、停留、离开,关卡载入,鼠标的点击、拖拽、进入、退出,触发器的触发、停止等。也可以来自 PlayMaker 自己的 Action。
开始事件(Start Event)是 PlayMaker 状态机的第一个事件(START 是一个系统事件),当 FSM 组件激活时,开始事件会调用,它所指向的状态即为状态机的第一个状态。“FINISHED”也是一个系统事件,代表“本状态已经执行完所有操作的意思。
普通的Event只能在Fsm内部被触发,而 Global Event 可以从 FSM 外部被触发。
Action
Variables
在 PlayMaker 中,一个 Action 定义的参数,可以像编辑其他 UI 的控件或者 Unity 的组件参数一样,填一个具体的值,也可以使用一个变量,而这个变量可以是另一个Action操作的结果,也可以是其他代码中传给 PlayMaker 的某个值。
PlayMaker 将游戏中的物体行为划分为多个步骤组成的序列,通过事件在不同状态间进行切换。如果把行为中的每一个步骤都称为一个状态(State),那么整个行为就可以通过把多个状态相互连接来表示。这些状态之间的连接,也就是从一个状态跳转至另一个状态的转换事件(Transition)。而这种把多个状态连接到一起、共同表现游戏对象的某种行为的方式,就被称为有限状态机。所以 FSM 描述的就是这种行为到底应该按照什么步骤来执行。进一步,对于每一个步骤来说,又可以继续向下细分为一系列 的动作(Action) 。这种由 Action-State-Transition-FSM 构成的描述逻辑,正是 PlayMaker 替代程序、控制 Unity 中游戏对象的基础。
▐ 编辑器能力
-
编辑器
-
Template
-
调试
▐ 扩展开放能力
PlayMaker 的扩展开放能力主要体现在以下两点:
1、PlayMaker 中的 Action 支持使用 C# 自定义开发
2、其他代码可以直接与 PlayMaker 进行交互
设计实现复杂的算法,封装成为 PlayMaker Action,然后交由策划或美术来使用。但是也应考虑到 PlayMaker 完全基于状态机这种“策略”,也会带来 Action 这个适配层的开发成本。
02
为什么
▐ 从技术角度
▐ 从协作角度
▐ 不适用场景
主角控制代码地址:https://github.com/NoelFB/Celeste/blob/master/Source/Player/Player.cs
03
启示
▐ 解决问题的策略
-
与 Visual Scripting 的区别
-
PlayMaker 官网(地址:https://hutonggames.com/index.html) -
PlayMaker – Unity Assets Store(地址:https://assetstore.unity.com/packages/tools/visual-scripting/playmaker-368)
– END –
线下活动
报告下载
大佬观点