本文将由Unity的Technical Evangelist,Ciro Continisio为大家分享针对非程序员而打造的游戏框架“Playground Project”的诞生过程。“Playground Project”旨在易于使用且方便设置,但不限制开发人员的游戏创意,最初是针对一群11到16岁之间的小朋友制作的。

该框架已开源发布至GitHub

www.taikr.com

下面由Ciro Continisio为大家介绍“Playground Project”的由来。

需求与解决办法

开始创建框架时,我心里有几个目标。首先,我想告诉孩子们制作游戏是很有趣的事情。想给他们一个完整的游戏开发体验,但同时不让技术问题难倒他们。最重要的是,不想限制他们的创造力。

另一个关键目标就是框架必须尽可能的阻止出错,并正确引导孩子。因此我想出了一个小框架并围绕着几个基本原则,每次做决定之前必须将其考虑进去:

  • 一套易于使用及组合的单任务组件

  • 非常简单的场景设置

  • 基于物理的游戏玩法(好玩!)

  • 简单的2D(孩子们可以从网上导入其他图形资源)

  • 自定义检视面板来检测设置中的错误

  • 提前做好用于显示生命值和分数的UI

 
更详细的来说,这些组件大多都是用于执行单个任务的简单脚本,因此他们可以被混合使用以产生更精致的游戏效果。这些组件的检视面板都在编辑器代码的帮助下进行了深度定制,并且提供了大量的设置指引。例如,MoveWithArrows组件在检视面板底部显示了一些小提示,并且如果不勾选Orient to direction则会隐藏Look axis  。

www.taikr.com

 

用户界面
说到UI,我预先制作了Prefab可以直接拖到场景中使用,无需任何设置。它将适应不同类型的游戏并且根据游戏是一个还是两个玩家而做出相应的改变。组件检视面板如下:

www.taikr.com

UI在游戏中的效果:

www.taikr.com

另外它会在左下角自动显示一个小的库存信息,显示可以被拾起的对象数量。在这个例子中,玩家有0个硬币和一把钥匙。

www.taikr.com

 

条件,行为,属性
在原先的基础上进行第一次迭代后,我一直在试图给Playground Project添加一些额外的结构,因此想到了一些关键脚本,用于尝试解决特殊类型的问题。
框架的核心就是条件,基本上就是if语句组成的组件。他们用于检查特定条件,如果通过验证就开始执行一些命令。现在可用的条件脚本分别是Area Conditions (基本上用于触发,输入,退出和停留), Collision Condition(碰撞时攻击),和一个用于捕捉输入的可配置 Key Condition。未来可能添加更多。
在第一次迭代中,我将UnityEvent下的动作进行分组。尽管它功能强大,但检视面板中的UnityEvent模块太过庞大且复杂,很难设置,因为它显示了目标对象所有的公共属性与方法。

www.taikr.com

因此我决定实现一系列只包含一个动作的迷你脚本。条件部分现在有一个简化的模块(使用很实用的RecordList开发,详情请查看Valentin的博文),可以轻松使用拖拽来连接各种条件选项。他们都实现了IGameplayActioninterface接口,放在Gameplay Actions分组下。


遵循这种简化规则,ConditionKeyPress检视面板的Gameplay Actions 模块如下图所示:

 

布尔值Use custom actions控制另外一个UnityEvent模块,让一些勇敢的学生可以获取UnityEvent的所有变量或方法。

最后,一些脚本被分配在Attributes一组,他们只是对象为数不多的属性,效率很高。例如,为游戏对象添加Resource属性就会将该对象变成可拾取和可堆叠的,会在UI上显示该对象的图标或数量,后面通过GameplayAction脚本ConsumeResource来消耗。
示例游戏
Scenes文件夹内包含了一些示例游戏,旨在展示各种可以利用该框架实现的游戏。
Defender这个游戏用于展示如何射击物体(激光发射器)或者随机生成(小行星),也是一个基于生命值的游戏,玩家的生命值脚本不在角色的游戏对象上,而是绑定在游戏环境上。

www.taikr.com

Football游戏是一款双人足球游戏,展示如何使用ConditionCollision脚本设置目标,以及当玩家得分时重置玩家和球的位置。

www.taikr.com

Maze游戏用于展示物品收集(这里是硬币),如何设置Area Conditions(环境条件),以及如何使用LoadLevelAction加载其它关卡。

www.taikr.com

Lander游戏展示了非典型的碰撞设置,只有碰撞到太空船的特定位置才会引发爆炸。

www.taikr.com

 

最后,Roguelike游戏展示了如何使用Conditions 和 ConsumeResource创建一个小型“锻造”系统。商人要求3枚硬币(带有Resource脚本)来换取钥匙(另外一个Resource脚本),钥匙可以被拾取并用于打开中间那扇门。
建议将框架发给孩子们之前先移除一部分游戏,防止他们抄袭。框架的的本意就是希望他们尽情地发挥想象力。