英特尔进阶游戏开发大赛获胜者 AuraLab 完美演示《Karma》

下载 PDF 801 KB

作者:Garret Romaine

Alexander Kuvshinov 曾经有许多梦想,而不仅仅是设计 Adobe Flash* 条幅。 他曾经就职于建筑公司、印刷厂和广告公司,从事的是一些技术含量较低的工作,其创意无法得到实现。 后来,他和两位来自俄罗斯游戏行业的资深人士 Andrey Sharapov 和 Roman Povolotsky 创立了 AuraLab 公司。 他们的第一款游戏 Karma.Incarnation* 1 在艺术、设计、音效和叙事等方面荣获了多项大奖;全世界的玩家都在期盼他们早日进军商业游戏领域。

Karma.Incarnation* 1 是一款 2D 冒险游戏,其背景是一个异想天开的迷幻世界,让人联想起 1968 年的经典卡通片 Yellow Submarine*, 亦或是受到 60 年代艺术家 Peter Max 的启发。在游戏中,主人公是一个长有触角的团状物体,名为 Pip,他必须从环境中进行学习,理解旅途中遇到的事情的因果逻辑,然后解决谜题并征服迷宫。 当 Pip 的行动无效时,他的面貌就会变得狰狞;反之,如果有效的话,他就会变得更加亲和。

对于 AuraLab 团队而言,开发工作取得目前的进展遇到了不小的挑战;仅将纸页上的涂鸦转换为数字动画便花费了数个月的时间。 设计出可供演示的样品,以及将产品全面推向市场,更是面临着重重的困难。 但是考虑到这款游戏在 2015 年英特尔® 进阶游戏开发大赛中所取得的成功,让我们深入了解一下该团队成功的奥秘。

图 1: Karma 是一款典型的点击式街机冒险游戏。


 

该团队的灵感来自哪里?

Karma 的主要人物 Pip 的灵感实际上来自 Kuvshinov 参加的一场平板电脑后面板设计的艺术大赛。 这次比赛首先打动他的,是获胜者能够获得一台背部印有获胜设计的 Apple iPad*。 Kuvshinov 开始拿黑色的 Apple 标识进行尝试,将标识上的缺口作为一张侧面的嘴巴。


图 2: Karma 主要人物 Pip 的设计灵感取自设计师晋级当地比赛的 Apple 标识。

他很快在电脑上设计出一群类似的造型,他随意地绘制污点,添加上一些眼睛和触角,并在上面随心地恶搞。 他说:“我没有赢得最终的大奖,但这已经不重要了,因为我的脑袋里想的都是这些新的造型。”


图 3: Kuvshinov 很快创造了一群这样的造型,Pip 最终应运而生。

他的卡通项目日趋成熟,但是在 2013 年,他工作的公司解散了,没想到这却成了塞翁失马。 不久,他就和朋友就创办了自己的游戏公司 — AuraLab, 并立即着手开发 Pip 项目。

进阶游戏开发大赛促使他们完成预生产阶段

在团队完成基于 Adobe Flash 的初期测试版引擎后,他们在游戏中设立了三个级别或“位置”。 Pip 可以在位置间移动,游戏也有一些简单的交互。 Kuvshinov 回忆道:“我们还有很长的路要走。”

幸运的是,该团队通过在技术岗位上多年历练,已经具备了优秀的设计和迭代技能。 当被问到目前对于该团队而言哪些技能最重要时,Kushinov 毫不犹豫地说,他们以前对整个游戏开发流程非常熟悉,这是最关键的地方。 他说:“我们知道我们的团队需要哪些技能,而且我们拥有这些技能。” 这些技能包括技术能力、开发流程经验、迭代和测试能力以及深厚的设计背景。

团队成员可以家中办公,而且使用的是免费软件。 在项目的预生产阶段,Google* Docs* 是他们的主要协作工具。 对于在独立开展工作时的任务追踪,他们使用了 Redmine,并将其安装在他们购买的一台虚拟服务器上。 Sharapov 说:“我们没有购买任何硬件,我们全都有 PC、笔记本电脑和 iPad,这就够了。 我们在 Unity* 上构建了供演示的小样,在 2015 年 Winter Nights 比赛上获得了最佳 Unity 游戏大奖,并获得了 Unity Pro 许可作为奖励,所以我们也不用购买该协议了。”

Kuvshinov 在 http://www.promoterapp.com 上看到了英特尔® 进阶游戏开发大赛的相关信息。 他看到自己满足参赛资格,并且有一个可利用 2 合 1 设备的触摸屏和适应性的出色演示模型,于是便参加了此次大赛。 他说:“然后,我就把这件事给忘了。 坦白讲,我并没有什么期待。 当得知获奖后,我们都非常惊讶。”

所以与一些踌躅满志的团队费尽力气创建参赛项目不同,AuraLab 在获胜之后才开始展开相关的工作 该团队加入全球独立游戏开发者社区,开始着手项目开发工作。 Sharapov 说:“在收到获奖的消息后,我们才启动主要工作。 我们这时候才开始准备用于在 PAX Prime 游戏展上展示的项目以及 Steam* 版本。”

图 4: AuraLab 使用强烈的阴影和奇特的艺术效果为玩家带来独特的感受。


 

Unity* — 引擎选择

团队早期争论不决的一个问题是选择哪款游戏开发引擎。 两款常见的引擎是 Unreal Engine* 4 和 Unity Engine,虽然这两款引擎都具备不俗的实力,AuraLab 最终选择了 Unity。

Sharapov 说:“Unity 支持我们轻松开发跨平台游戏。 我们以前有过使用 Unity 的经验,这很有帮助。 而且,在俄罗斯也更容易为项目寻找优秀的 Unity 编程人员。

在决定使用 Unity 引擎后,AuraLab 将会启动一些重要的游戏设计会话,并开发能够被公众试玩的真实演示。 他们使用了 Unity 5 中的 2D 工具套件插件,并且遇到了诸多挑战。 主程序员 Yuriy Kuptshevich 创建了几款工具加速以下任务:

  • 在运行时上传和卸载地图册。
  • 按顺序上传一系列地图册。
  • 计算地图册中能容纳的纹理数量。

Kuptshevich 还利用图形压缩做了几次实验,但是他很快发现,尝试从 *.png 文件异步上传纹理会出现问题。 Unity 团队承诺在 5.3 版中修复此问题。

帮助提示 — 吸取的经验

由于团队在对外推广游戏时遇到了许多困难,他们深知开发人员所面临的挑战。 秉承这种精神,可能也为了积累更多善缘,Kuptshevich 非常希望与其他独立开发人员分享下面的方法和技巧:

如何将颗粒和对象的缩放绑定到一个场景中:

BorderLeft and BorderRight - pivots the edges of the object

    public void ScaleParticles ()
    {
        float size = Vector3.Magnitude(Camera.main.WorldToViewportPoint(BorderLeft.position) -
                                       Camera.main.WorldToViewportPoint(BorderRight.position));
        _particleRend.maxParticleSize = size;
    }

如何通过委托操作或/和在设定时间内在循环中调用它们,创建一个时间延迟的拉姆达表达式:

    public void InvokeWithDelay (Action method, float delay)
    {
        StartCoroutine(InvokeMethodWithDelay(method, delay));
    }

    private IEnumerator InvokeMethodWithDelay (Action method, float delay)
    {
        yield return new WaitForSeconds(delay);
        method.Invoke();
    }

Kuptshevich 的最佳建议如下: “保持简单。 果可以,尽可能不要做复杂的事情。” 他还建议开发人员多多设计一些场景,并在这些场景中使用工具来处理重复流程。 他的团队将 Unity 编辑器与他们自己的工具相连,以便自动处理所有任务。 “一开始,你可能会觉得在工具上花费了太多时间,但是当深入开发流程的主要部分时,自动化可以让我们的工作更轻松,速度更快。”

Kuptshevich 承认,只要有机会,我们的团队就会做一些不同的事情。 经验是最好的老师。 他说:“我们所有人都不是菜鸟。 我们在开发过程中没有犯过任何严重错误,因为我们在前期制作方面具备丰富的的经验。 此时的计划和设计决策非常重要。”

AuraLab 设计了一款简单、出色的游戏,虽然场景不多,但游戏性更加突出。 这有助于缩短制作周期并降低成本。 Sharapov 说:“我们的准则是,如果你能够将工作划分为多个部分,更快地完成第一部分,并且能够确保提供相同或更好的质量,那么就放手去做。” 他说,一旦你做了一个决定,就要“毫不犹豫”地坚持。

实时演示可以提供积极的反馈

AuraLab 的背后没有庞大的测试团队,而主要依靠在相关活动、会议上亲自演示,进而在不同的阶段对游戏进行测试。 Kuptshevich 表示:“我们的测试方法是分别运行每个场景。 在一个包含许多相关场景的游戏中,能够在故事情节的任何位置进行轻松测试也很重要。 听起来像老生常谈,但是请从一开始就记住这一点,这样的话整体开发工作才会更轻松。”

为了描述动画脚本,团队决定使用其他国家的协同程序。 这些组件允许多个接入点在某些位置暂停和恢复执行,进而使用于非优先多任务处理的子例程得以推广。 这有助于他们灵活地管理异步事件,编写定制代码,从而更轻松地管理与动画中的触发器相关的活动。

他们使用了 Mecanim 的动画状态机 (Animation State Machines) 作为逻辑。 根据 Unity 文档, “Mecanim 的动画状态机能够对与某一特定人物相关的所有动画剪辑进行概括,并支持游戏中的各种活动(例如,用户输入)触发不同的动画。” (如欲了解更多详情,该团队建议读者阅读代码项目,其中包含 Simon Jackson 的书中有关“掌握 Unity 2D 游戏开发”内容的链接,深入介绍了状态机。 您还可以找到他的状态机项目代码示例链接。)

AuraLab 团队强调,开发人员应创建在各类中通用的定制检查器,因为他们需要显著提升大部分工作流程的功能和灵活性。 Kuptshevich 表示:“从长期来看,这反而会节省时间。”

Sharapov 说,根据玩家的直接反馈,游戏中有一些恼人的瓶颈必须要修复。 因此,他们对演示中的某些部分进行了重新设计,使用户更轻松地玩转整个游戏。 但是,我们已经在着手解决一些问题,肯定会为会场观众带来出色的体验。

图 5: AuraLab 团队成功在 Karma 中创建了怪异、引人入胜的华丽场景。

 

Karma 包含有趣的原声配音,以及引人入胜的效果和抚慰人心的音乐。 该团队将其归功于与 Zmeiraduga 乐队的合作,他们优美的即兴创作音乐吸引了大批追随者。 乐队百分之百即兴创作的音乐意味着,观众每次都会有完全不同的音乐会体验。 为了创建其他音效,Kuvshinov 充分利利用了麦克风、免费发放的样本以及生动的想象力。

跨多平台实现

由于 Unity 引擎可灵活提供输出目标,所以 AuraLab 能够轻松地针对多个平台创建演示。 他们目前支持 Microsoft Windows* 7/8、Windows Vista*、Windows XP* SP3、Mac* 和 Android*。 该团队计划在 PC、Mac、iOS* 和 Android 上发布首个商用版本后,针对 AppleTV*、Microsoft Xbox* 和 Sony PlayStation* 开发合适的版本。

Sharapov 表示:“Unity 引擎支持我们轻松创建多种版本。 但是,在构建能够在多个平台上稳定使用的版本之前,我们还需要对游戏进行多次重新设计。” 所有版本都有各自不同的功能,所以使用一款了解这些细微差别的游戏开发引擎非常有帮助。

Sharapov 表示:“经过反复试验以及数个月的代码重构,我们了解到如何创建一个稳定的项目架构,以及如何形成一个稳定的开发流程,花费最少的人力同时为每个支持的平台构建不同的版本。

在该阶段,有必要制定一些规划,该团队始终提前规划,使其游戏能够在移动和台式版本上同时运行。 他们知道,他们需要支持多种不同的用户控制方式,从手势到触摸,再到单击操作。 Sharpov 表示:“我们从一开始便对游戏进行了规划,使其能够在移动和台式机版本上同时运行。” 通过提前针对多个版本进行规划,他们避免了在过程中针对瓶颈再编码的麻烦 — 这会浪费更多的时间。

例如,团队始终有这样的意识,用户可能没有鼠标,或只使用触摸屏。 他们在规划“提示”图标时所作的设计便能够体现这一点。 他们在测试中发现,当用户将鼠标放在一个对象上时,无法显示提示。 他们还意识到,他们无法将可点击的小元素拉得太近,因为他们需要提供更大的点触区域,以便手机用户使用。

测试会话经常会让他们发现没想过的问题,并做出修复。 Sharapov 说:“我们了解到,手机摄像头对场景定位和缩放操作与台式机版本不同。 我们很快就认识到了这一点。”

团队在右下角插入了一个提示图标,以便有新提示进入时,图标的指示灯闪烁。 很可惜,当他们在 iPad 上测试提示时,他们发现,多数用户并没有注意到提示图标,因为当用户手持平板电脑时,在自然状态下会覆盖该区域。 他们做出的反应是将提示图标的其他支持添加到游戏视口中。 现在,指示灯将在主要人物的头部以及右下角同时显示。

未来计划

Pip 和 AuraLab 的未来一片光明。 在撰写本文时,尚未确定能够下载适用于四大主要平台的完整版 Karma 的发布日期,但是该团队正在全力以赴地开发。 目前,他们已经计划开发第二集游戏,以充分开发 Pip 的形象。 他们将继续丰富故事情节,提供更多谜语、谜题和迷宫,为大家带来一段有趣的旅程。 他们乐于分享自己的技能、技巧和代码,也许已经为自己积下了善因。

资源

YouTube* 预告片: https://www.youtube.com/watch?t=1&v=d_PeeemZIBA

Kobe 频道(包含 6 段独家短视频): http://coub.com/karma.incarnation1

Karma 演示: http://karma-adventure.com/demo.html

Unity 引擎下载: https://unity3d.com/get-unity

2015 年英特尔® 进阶游戏大赛: https://software.intel.com/sites/campaigns/levelup2015/

有关编译器优化的更完整信息,请参阅优化通知