这一条称不上原理,只是从面向对象的角度将游戏进行拆分。
而Jesse Schell的才一语道破游戏设计的本质:“决定不同的属性、属性的状态、改变状态的事件,就是你游戏机制的核心”。
试想,Unity里的Update,其实也就是动画的基础,在极短的时间内决定要改变哪些物体的哪些属性。动画电影依靠镜头语言,剪辑来实现,而游戏则是由脚本来控制这些交互对象,就像皮影戏背后的操控者一样。
面向对象拆分游戏:本质和局限
通过面向对象的方式,将游戏拆解为对象、属性和状态是很有帮助的分析工具,但它更像是一个框架,帮助设计师理解游戏中的基本构件。它的意义在于让我们从复杂的整体中提取出可以单独处理的单元。但真正的核心在于这些单元之间的动态关系,而不是静态的拆分。
动态核心:属性、状态与事件的决策
Jesse Schell 的分析更进一步:不仅关注对象本身,还关注这些对象如何在游戏运行过程中发生变化。每次属性的状态改变,都会带来潜在的连锁反应,而这些变化由事件触发。比如在 Unity 中,Update
是一种不断发生的“事件”,它每一帧都会检查哪些对象的状态或属性需要更新,这些更新就像是动画师操纵皮影戏的手,一次次地为画面注入活力。
游戏与动画的根本区别
动画电影依靠剪辑和镜头语言传达情感和信息,而游戏的动态性则来自脚本和玩家的交互。动画的所有变化都是预设的,观众只能被动接受。而游戏则赋予玩家一定程度的“操控权”,这种操控权正是通过状态机来实现的:玩家的输入是触发事件的核心,而事件的响应机制则决定了游戏对象的属性如何发生变化。
《游戏设计艺术》28号透镜:状态机
状态机正是分析游戏机制的利器。通过状态机,我们能够清晰地定义游戏对象的行为逻辑。以下是透镜问题的分解和思考方法:
- 我的游戏中有什么对象?
找出游戏中所有可以交互的核心对象,比如角色、道具、敌人、关卡元素。 - 这些对象的属性是什么?
定义对象的可变参数,比如生命值、位置、动画状态。 - 每个属性有什么可能的状态?
对每个属性列出所有可能的状态,例如“生命值”可能是“满血”、“受伤”、“濒死”;“动画状态”可能是“待机”、“攻击”、“跳跃”。 - 每个属性中,是什么触发状态改变?
明确状态变化的条件和事件。例如,玩家攻击敌人时,触发“生命值”减少;当生命值降到 0,触发“死亡”状态。
玩游戏的过程是做决定
玩家在游戏中的每一个决定,都是基于当前的状态信息。设计师的任务就是利用状态机,让这些决定的结果在游戏世界中可见且有意义。
总结
通过这种方法,状态机成为了设计游戏机制的核心工具:
- 它让设计师能够系统地处理对象的状态变化。
- 它使玩家的选择和行为对游戏产生具体影响,从而增强沉浸感和交互性。
真正优秀的游戏设计,正是通过状态机的复杂运作,把所有的“对象”“属性”“事件”有机地联系在一起,形成一个令人着迷的互动系统。
原文:
原理48: 对象、属性、状态
让我们尝试退后一步,从一个抽象、广义的角度来看游戏。把复杂的事情分解成基本的部分是一个更好地了解它们的好方式。所以我们可以这样考虑:游戏可以归结为一种体验,它包含:(1) 一个可以游戏的空间;(2) 一个(或多个)交互对象;(3) 一个(或多个)提供输入的家。这由三类基本单位组成的生态系统为所有互动游戏提供了基础。《乓》(Pong)、《大空陨石歼灭战》(Asteroids,也有译作《小行星》或《太空战机》)、《俄罗斯方块》、《使命召唤》(Call of Duty)、《卡卡颂》(Carcassonne) 都是由这些元素组成的。
所以,在实践中,设计师将他们的大部分时间花在定义游戏中的空间和交互对象上,而这些也就是游戏中的“对象”(objects)。杰西·谢尔(Jesse Schell)在他的《游戏设计的艺术》(The Art of Game Design: A Book of Lenses)一书中就有涉及到这方面的内容。但从更广泛的意义上来说,这也是编程语言的工作方式。“对象”就是游戏中像是玩家角色、各种物件、可移动的物体,等等这样的元素。
举个实际的例子,在《超级马里奥兄弟》(Super Mario Bros) 游戏中,“对象”包括马里奥、金币和板栗仔(goombas)。“对象”可以简单如一块用来阻碍角色前进的不可交互的石头,也可复杂如 boss 的复杂攻击模式、进化的不同阶段,以及物理的表现状态。从根本上说,“对象”是游戏的组成部分,通常它们都是名词:箱子、敌人、门、钥匙、燃料,以及游戏中其他可以交互的一切。这些名词都可以用些微的细节描述,而这些程序中对“对象”赋予的可变或可操控的变量,就是它们的“属性”(attributes)。
我们来想象一个陶罐,玩家可以打破它来获取里面的金币和回血。以下是它可能的属性:
■ 尺寸:0.5 米 x 0.5 米;
■ 动画:空闲状态;
■ 是否可被玩家攻击:是;
■ 生命值:1;
■ 影响因素:所有类型的攻击;
■ 不同损毁程度下的物品掉落率,0.5 秒延迟:
15%:1 个额外生命值;
8%:1 个金币;
2%:一袋 10 个金币;
75%:没有奖励。
这是一个相当基本的对象,它有着有血有肉的属性。这些属性详细地描述了它,包括有多大的几率在攻击它的时候能得到一袋金币(几率不大)。当然,这些不是它可能有的所有属性。大多数游戏设计会将游戏中所有对象的所有属性都列出来。对于大游戏来说,这将是一个非常庞大的表格,而对对象数量相对较小的卡牌游戏和桌上游戏而言,这个表格会相对简单。
属性并不是全部。对象还可以被“状态”(states)来定义。状态是表达属性的方式。对象状态的改变可能来自于玩家与其发生的交互、它们互相之间的交互,或游戏设计师(国内公司通常称为游戏策划)定义的其他对象的动作,如定时器。
我们还是以陶罐为例。它只有两个状态:
■ 活着(alive):陶罐存在于这个游戏中的基本状态;
■ 死亡(dead):陶罐被攻击之后的状态。
陶罐状态的改变是由攻击触发的。我们之前定义的属性指出,当它受到攻击值大于 1 点的攻击时,陶罐会根据物品掉落率表格中的定义掉落物品。随即它将进入“死亡”状态。
死亡状态下其属性如下:
■ 动画:陶罐破碎;
■ 尺寸:一堆 0.1 米 × 0.2 米 的碎屑;
■ 持续时间:3 秒后消失;
■ 是否可被玩家攻击:否;
■ 影响因素:不再能交互。
以上就是游戏中对象、属性和状态的基本概念。通过这个方法,我们可以更容易地把游戏中运动的元素看作环环相扣的齿轮,而不是一个单一的整体体验。事实上,整个生态系统是复杂而相互关联的,一个对象的状态改变可能带来连锁反应,比如让另一个对象着火,或者让敌人在附近复活之类的。由于有了状态改变和不同的属性,游戏的各种复杂变化都成了可能。
另外,这些词语成为了游戏开发过程中跨领域交流的基本用语。在设计师、美术、程序员和制作人的讨论中,需要这样的理解程度和流畅度才能更好地描述游戏中的元素和它们之间的交互。