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