为非程序员打造的Unity游戏框架 Playground Project
本文将由Unity的Technical Evangelist Ciro Continisio为大家分享针对非程序员打造的游戏框架“Playground Project”的诞生过程。“Playground Project”旨在易于使用且方便设置,同时不限制开发人员的游戏创意。该框架最初是为一群11到16岁的小朋友制作的,目前已开源发布至GitHub。
下面由Ciro Continisio为大家介绍“Playground Project”的由来。
需求与解决办法
开始创建框架时,我心里有几个目标。首先,我想让孩子们认识到制作游戏是一件有趣的事情,给他们提供完整的游戏开发体验,同时避免他们被技术问题难倒。最重要的是,不限制他们的创造力。
另一个关键目标是框架必须尽可能地减少出错概率,并正确引导孩子。因此,我设计了一个小框架,并围绕几个基本原则进行开发,每次做决策时都要将这些原则考虑在内:
- 一套易于使用及组合的单任务组件
- 非常简单的场景设置
- 基于物理的游戏玩法(趣味性强)
- 简单的2D模式(孩子们可以从网上导入其他图形资源)
- 自定义检视面板,用于检测设置中的错误
- 提前做好用于显示生命值和分数的UI
更详细地说,这些组件大多是用于执行单个任务的简单脚本,它们可以相互混合使用,以产生更精致的游戏效果。这些组件的检视面板在编辑器代码的帮助下进行了深度定制,并提供了大量的设置指引。例如,MoveWithArrows组件在检视面板底部显示了一些小提示,如果不勾选“Orient to direction”,则会隐藏“Look axis”。
用户界面
说到UI,我预先制作了Prefab,可直接拖到场景中使用,无需任何设置。它能适应不同类型的游戏,并会根据游戏是单人还是双人做出相应改变。组件检视面板如下:
UI在游戏中的效果:另外,它会在左下角自动显示一个小的库存信息,展示可以被拾起的对象数量。在这个例子中,玩家有0个硬币和一把钥匙。
条件,行为,属性
在原先的基础上进行第一次迭代后,我一直在尝试为Playground Project添加一些额外的结构,因此想到了一些关键脚本,用于解决特殊类型的问题。
框架的核心是条件,基本上是由if语句组成的组件。它们用于检查特定条件,若通过验证则开始执行一些命令。目前可用的条件脚本分别是Area Conditions(主要用于触发、输入、退出和停留)、Collision Condition(碰撞时攻击),以及一个用于捕捉输入的可配置Key Condition。未来可能会添加更多。
在第一次迭代中,我将UnityEvent下的动作进行了分组。尽管它功能强大,但检视面板中的UnityEvent模块过于庞大和复杂,很难进行设置,因为它会显示目标对象所有的公共属性与方法。
因此,我决定实现一系列只包含一个动作的迷你脚本。条件部分现在有一个简化的模块(使用很实用的RecordList开发,详情请查看Valentin的博文),可以通过轻松拖拽来连接各种条件选项。它们都实现了IGameplayAction接口,放在Gameplay Actions分组下。
遵循这种简化规则,ConditionKeyPress检视面板的Gameplay Actions模块如下图所示:
布尔值“Use custom actions”控制另外一个UnityEvent模块,让一些勇于探索的学生可以获取UnityEvent的所有变量或方法。
最后,一些脚本被分配在Attributes一组,它们只是对象为数不多的属性,效率很高。例如,为游戏对象添加Resource属性会将该对象变成可拾取和可堆叠的,会在UI上显示该对象的图标或数量,后续可通过GameplayAction脚本ConsumeResource来消耗。
示例游戏
Scenes文件夹内包含了一些示例游戏,旨在展示利用该框架可以实现的各种游戏。
- Defender游戏:用于展示如何射击物体(激光发射器)或者随机生成(小行星),这也是一个基于生命值的游戏,玩家的生命值脚本不在角色的游戏对象上,而是绑定在游戏环境上。
- Football游戏:一款双人足球游戏,展示如何使用ConditionCollision脚本设置目标,以及当玩家得分时重置玩家和球的位置。
- Maze游戏:用于展示物品收集(这里是硬币),如何设置Area Conditions(环境条件),以及如何使用LoadLevelAction加载其它关卡。
- Lander游戏:展示了非典型的碰撞设置,只有碰撞到太空船的特定位置才会引发爆炸。
- Roguelike游戏:展示了如何使用Conditions和ConsumeResource创建一个小型“锻造”系统。商人要求3枚硬币(带有Resource脚本)来换取钥匙(另外一个Resource脚本),钥匙可以被拾取并用于打开中间那扇门。
建议在将框架发给孩子们之前先移除一部分游戏,防止他们抄袭。框架的本意是希望他们尽情发挥想象力。