转自:http://www.gameres.com/804804.html

简介与序曲

在Celesete里,许多细微的行动都是发生在转瞬之间的,甚至往往比你想象中还要“转瞬之间”。

这里是 [游戏机制设计] 专栏,由 Alex Whiltshire 邀请游戏制作人员们来分享、讨论他们在游戏制作过程中遇到的困难、趣事和辗转反侧,以及他们是如何战胜这些琐事,打造出最适合他们游戏的机制的心路历程。今天,我们有幸请到了最近冉冉升起的爬山-平台跳跃游戏新作《Celeste》的制作者们,请他们聊一聊精心打磨角色控制代码所花费的心血。

上个月初,Celeste 的制作者们放出了他们游戏中最重要的一项机制--主角 Madeline 的角色控制机制源代码。其中包含了 5472 行代码以及数不胜数的细致的Variables (变量): JumpGraceTime, DashHJumpThruNudge 或 DuckFriction, 这些代码使得Madeline无论是奔跑、跳跃、攀爬、还是冲刺都能拥有精确并且顺畅的感觉,这些代码使得玩家操控下的Madeline 仿佛有了自己生命一般灵活。

如果你不是一名程序员,那你就不大容易猜出来这些代码代表了什么,有什么意义,所以我采访了 诺埃尔.贝瑞 先生来解释这些代码是如何聚合在一起来使玩家角色的操控感“如丝般顺滑”的。专注在她的冲刺能力上,经由反复考虑,最后出现在 Celeste 这款游戏中的机制,最终使得你能够完美操控 Madeline,使她能做出玩家真正期望去做出的动作,而并不必须是你按下的按钮所连接的动作。

就像你预料的一样,Celeste 中的冲刺功能是一个短程的高速冲刺,主角 Madeline 能够向8个方向自由地冲刺,在空中也能冲刺。但是想要再次使用冲刺技能的话,则需要主角接触地面来重新充能冲刺能力,所以说在每次跳跃过程中她只能冲刺一次(使用后头发颜色变成蓝色)。这是个极简的机制,能让玩家瞬间就理解其含义,但是并不会马上就把这个使用这个机制的技巧全部吃透。在此之上,整个游戏都是围绕这个机制来创作的,将刺儿们摆放在环境的周围制造出一个狭窄而危险的区域,仅给予玩家一息之机来落地、充能,重新喘息。

它的运作方式十分直截了当,当你按下冲刺按钮的时候,她便在那一瞬间进入了“冲刺状态”(A separate ‘dash’ state)。 她的头发会变成蓝色,会有一个计时器开始计时,她会被施加一个固定的速率(velocity),指向你按下冲刺按钮时候的方向。接下来计时器会使你在恰好0.15s 内无法控制 Madeline(译注:这使玩家不会因乱输入指令意外改变冲刺的方向),在那之后,随着冲刺速率降低,系统会渐渐将你对角色的控制功能还回来,直到她回到“正常状态”。所有这一切都发生在不到一秒之内。

尝试将每次“冲刺”做成完美

经典的平台跳跃游戏设计技巧

他们做了巨量的工作来确保整个冲刺过程感觉起来很棒、很顺,最后巧妙小心地把控制能力,完整地,稳定地归还给玩家。“如果你得等到整个冲刺时间结束,才能输入其他操作指令,那么整个冲刺动作就会感觉很僵硬,” 诺埃尔.贝瑞说道。“这里面有许多微小的细节,是一般玩家不会去注意到的,除非是那些挑战极速通关记录的玩家。”

这里展现了Celeste的动作设计非常聪明的一个点,那就是游戏始终会把一个动作的“最终裁决权”交给玩家,来维持“操作感”。另外,即便 Celeste 确实很难,那它其实远比那种需要精确、完美到像素单位级的变态游戏要简单,比你想象中的还要简单。“许多我们之所以这样写这样一段代码的意图,是建立在我们认为玩家想要去做什么样的动作的基础上的。” 诺埃尔.贝瑞继续说."我们想要把难度设计的重心放到环境和关卡上。"

他们也使用了不少经典的游戏设计技巧来润色操控,比如“威利狼跳”,名字由来于威利狼在动画里跑出悬崖范围之后的空中动作。这实际上是让系统赋予玩家角色一小段额外时间,可以在Madeline从地面走到空气后的短暂时间内仍然做出跳跃动作。异曲同工的,当她的冲刺会因稍稍有些低而撞上墙的时候,游戏会调整路线,使她能够“滑上”墙壁上方的地面,而不是撞到墙上卡住。

译者补充图:威利狼跳 (Coyote Jump)

“我们还得考虑究竟精确到多少个像素单位,当玩家角色在靠近一面墙或者浮于地板之上时仍能够发出一次冲刺动作” 诺埃尔.贝瑞说:“虽然可能只有一两个单位级别的差距,但是为了把握到正确的感觉,我们做了大量的测试来验证。”

大量测试与细致微调

诺埃尔.贝瑞和它的设计师小伙伴 麦特.索尔森 会邀请朋友来参加测试,虽然他们知道,当新玩家们玩一个游戏的早期原型时,即便一次又一次地撞墙,玩家们也很难识别出究竟是游戏的那个部分出了错。“但观察他们的游戏过程,你就能看出那里运转的不大对劲。有时候是关卡设计的问题,比如那块墙本身有问题,有时则感觉是玩家角色摩擦力不足‘太滑了’,所以显得不稳定,有时则简单的是他们的跳跃不够高,没达到跳跃的最大高度。”

但同时 Celeste 对于会使游戏规则产生细微变化的地方十分小心。许多游戏都会进行一定程度的“操控器微调”,他们会微调系统读取手柄、键盘输入的信息,来使他们更大几率符合玩家们实际想要去做的动作,而不是他们实际上按了啥。(译注:就是说辅助瞄准系统)大多时候是这么做的:要么是修改那些输出实际为零的区域(Deadzone),或者是增大那些常见方向(Direction)相关联的角度参数,来使玩家能够更容易向这些方向攻击、冲刺。

而尽管普通玩家们抱怨最多的就是他们有时会意外地往不想要的方向冲刺, Celeste 仍只微调了一点点它们读取摇杆信息的方式。因为游戏需要,冲刺功能可以向任何方向使用,所以游戏只有在赋予 Madeliine 能够冲刺的八个方向中每个方向同等的权重时才表现得最好。呃,大致同等,事实上因为玩家很少向下,下左,下右方向冲刺,这几个方向稍微有点更高的阀值。

“这是个特别棘手的问题” 诺埃尔.贝瑞说道,“我们可以做一些尝试,来读取一次操作指令输入中的多个帧(reading multiple frames of input),但这也会导致其他问题,比如说如果求的是多个帧中的平均值的话,当玩家快速地轻打摇杆时,系统可能没法读取到正确的指令。而我们想要做到的是尽可能的精确,所以我们尽可能100%还原从摇杆上读取的指令,而不是微调它。”

将一个机制从设计层面上调整到最佳

实际上,有许多设计上的细微调整都是在 Celesete 的早期开发流程中被决定的,而如果我们将时钟拨回那么一点点,这款游戏的原型最早诞生于2015年,是一个 麦特.索尔森 与 诺埃尔.贝瑞 仅用了4天完成的PICO-8 jam game。但当他们着手开始设计关卡之后,他们必须要在对主角的操控做修改时加倍小心,因为任何对主角操控动作的微小改动都可能影响所有他们游戏中所做的其他设计工作。

“我们曾经在游戏里放过一个,现在来看比较糟糕的机制,但我们一开始还觉得蛮酷的。”诺埃尔.贝瑞回忆道,“当我们从PICO-8的原型版本转移到现在工作的平台之后,我们增加了一个攀爬墙壁的能力给主角,然后我们立刻意识到需要给他加一个精力条、时间限制之类的限制条件。但我们同时也加入了这么一个设计:当你在攀爬墙壁耗空精力值之后你不得不在地面上站个一、两秒种来喘气,之后你才能继续爬墙。我们甚至做了几个关卡,是以这个机制为基础而设计的,像是你必须要在破碎的墙、平台之中跳跃,然后找准时机喘气来恢复精力。但是,这个机制其实完全破坏了这个游戏的“flow“。没有任何人会觉得站在原地发呆发个两秒是件有趣的事。所以我们不断地减少等待所需的时间,然后当我们降到大概只有0.2秒的时候,我们才清醒过来,我们为什么还要做这个啊?” 诺埃尔.贝瑞大笑道。

他们俩也对于把游戏中不符合游戏机制,游戏玩法的东西移除一直是持一个乐观、正向的态度的。而后来,在他们有了大量的关卡之后,调整的部分就主要是 麦特.索尔森 的微调了。“他好像甚至有把浮点数(floating)从0.2调到0.21来尝试一个东西感觉起来对不对味,哈哈”

在Celesete里,许多细微的行动都是发生在转瞬之间的,甚至往往比你想象中还要“转瞬之间”。诺埃尔.贝瑞回想起来了他们设计 [绿色水晶] 时候的细节,当Madeline在半空中碰触到一个 [绿色水晶] 时,游戏会将画面帧“冻结”一瞬间然后重置Madeline的冲刺能力。最开始发布的游戏版本里,这个一瞬间只有0.1s,但是当他观看了许多玩家的视频之后,他仍然觉得那个持续时间太长了。现在的版本,这个一瞬间则只有0.05s,而且这个一瞬间仍然是肉眼可察觉的。“人眼的辨识能力真的远远比我们想象的还夸张。”诺埃尔.贝瑞说道。

殊途同归地,Madeline 的单次冲刺过程仅仅持续0.15s,但是你却能够清晰感觉到这一瞬间的“份量”,这是由于许多小的、细微的视觉效果的支持。比如一阵疾风般的粒子效果在半空中留下她的冲刺轨迹,或是一阵微小的屏幕抖动,方向恰好是与Madeline冲刺的方向相匹配。“我们忙了很久在这些小玩意上,我们投入了很多精力,来确保游戏里的每个动作,每个行动都有它的清晰的影响,” 诺埃尔.贝瑞说道。“我们真的很讨厌那种任何东西都是轻飘飘的,没有清晰、立竿见影的冲击感的情况。” 但他们也非常小心,不在这些特殊效果做过头,不将他们做的喧宾夺主。使得你能感受到它们,但不会被它们分散了注意力。

这不是BUG。。。是技巧!!

一旦你完成游戏的一周目,你就可以开始着手挑战游戏的“B-面”啦, Celeste 从B面开始会教你更夸张的技巧来向你展示 Madeline的冲刺功能的更多可能性,甚至让你抵达一些你之前想都没想到的关卡。比如说一种“长跳”一样的动作, 在Madeline的一次冲刺抵达地表的一瞬间跳跃,这时Madeline就能继续这股势能,向前跃进。这个动作灵感来源与 诺埃尔.贝瑞和麦特.索尔森之前合作过的一款游戏 《Towerfall》, 但他们在本作里放入了更多深度。延迟Madeline的跳跃动作直到她的冲刺能力冷却好的瞬间,这会使她带着冲刺的势能冲向半空中,并且她能准备好再次冲刺。

这并不是提前计划好的,而是自然而然从现有机制里生发出的。但当这个技巧成功地帮助速通玩家跳过他们做好的关卡设计后。麦特.索尔森和诺埃尔.贝瑞就开始爱上这个了。“速通玩家能够做一大堆那些疯狂的事!而且这些并不会过度影响休闲玩家的游戏体验。那些技巧的判定帧足够短暂,所以没人能够偶然性做出那些动作,不过一旦你搞懂原理,它的判定帧也长到足够让你捕捉到机会持续使用这个技巧。”

也有其他几个游戏技巧在游戏的开发流程中浮现出来,诺埃尔.贝瑞和麦特.索尔森全心全意地支持着这些技巧,但并不是所有的这些游戏技巧都有一个出彩的结果。游戏里内设了一个计时器,显示了一场游戏已经经过的时间(为速通爱好者准备的)。在游戏刚发售的时候,这个计时器会在玩家打开菜单,以及经过过场小动画的时候暂停。“但是在游戏发售的几周后,玩家们意识到在几个特定的房间内,如果你打开暂停菜单再恢复游戏时,Madeline 会移至到她在房间里设置的重生点。这会帮助玩家省下几个像素格的时间,因为在打开菜单时游戏的计时器会暂停。我并不确切地知道到底有多少个房间是最适合使用这种技巧的,不过我想大概得有几十个吧,而且说实话这个技巧并不是一件很有趣的事。没有玩家喜欢这种技巧,没人想要在每次进入一个房间的时候都试一下打开然后再恢复菜单。”

结语:

在游戏中,所有赋予Madeline移动能力的系统都是隐形的。在玩家眼前,她只是单纯地移动着。但是这份轻松自如的灵活手感,却是来自于实实在在的数个月的对于源代码中细微数值的微调,来使她的移动模式真正符合玩家想要的。“这就是为什么代码里她的类(class)有那么长,这是因为我们不断地添加细节到我们关注的特定的实例中(Insatances),”诺埃尔.贝瑞说道。“这对于一个以移动能力为核心的游戏来说非常重要,总是有些你不得不去设计的细节,他们也许在现实的物理环境下不合理,但是在游戏里的手感却能成倍顺滑。”

你能在这里看到关于 Madeline的移动能力的源代码

《Celeste》 开发者是如何精心制作“冲刺”的的更多相关文章

  1. PCB中加入任意LOGO图文说明 精心制作

    防静电图 首先我们要对下载下来的图片进行处理否则Altium designer6.9会提示装载的图片不是单色的,用Photoshop CS打开开始下载的图片 选择 图像→模式→灰度 在选择 图像→模式 ...

  2. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  3. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  4. Xcode 6制作动态及静态Framework

    技术交流新QQ群:414971585 有没有写SDK或者要将一些常用的工具类做成Framework的经历? 你或许自己写脚本完成了这项工作,相信也有很多的人使用 iOS-Universal-Frame ...

  5. Slides - 在线制作效果精美的幻灯片(PPT)

    Slides 是可以在浏览器中使用的在线幻灯片编辑器.与传统的演示软件,比如 PowerPoint 相比,Slides 不需要下载任何东西.你所有的信息都是安全地存储在我们的服务器上,无论你在哪里.不 ...

  6. Xcode 6制作动态及静态Framework和各种坑

    Xcode 6制作动态及静态Framework http://www.cocoachina.com/ios/20141126/10322.html 有没有写SDK或者要将一些常用的工具类做成Frame ...

  7. 网站优化之-SEO在网页制作中的应用(信息来自慕课网课程笔记)

    一.SEO基本介绍. 1.搜索引擎工作原理. 2.seo简介:SEarch Engine Optimization,搜索引擎优化.为了提升网页在搜索引擎自然搜索结果中的收录数量及排序位置而做的优化行为 ...

  8. 问题:UltraISO:这个软件有问题,它制作的iso文件会造成无法正确识别。用PowerISO吧

    最近研究硬盘安装 centos7.6 (rhel 7.6)的 硬盘安装,因为原版dvd超过4G了,所以通过删除java-open-jdk的方式减少dvd光盘的大小. 但是前期用UltraISO制作的i ...

  9. 《SEO在网页制作中的应用》视频笔记

    学习了慕课网<SEO在网页制作中的应用>视频,今天将里面的知识整理一下. 一.SEO介绍 1.  搜索引擎工作原理 搜索引擎现在主流有百度.谷歌.360,他们都有庞大的搜索引擎数据库,每个 ...

随机推荐

  1. 【转】ASP.NET Core开发之HttpContext

    ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext. 那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具 ...

  2. Spring Boot + Jpa + Thymeleaf 增删改查示例

    快速上手 配置文件 pom 包配置 pom 包里面添加 Jpa 和 Thymeleaf 的相关包引用 <dependency> <groupId>org.springframe ...

  3. PyCharm基本用法

    1.修改字体 在file->settings下进行修改如下图: 2 修改颜色背景 在file->settings下修改,如图: 3连接git 点击file->settings,选择版 ...

  4. Jmeter处理返回结果的值

    接口测试中,获取返回结果的值可以用插件JSON Path Extractor 此插件可以直接处理json,通过key来取值. 该插件下载地址为:http://jmeter-plugins.org/wi ...

  5. Linux:CentOS 7系统的安装

    相信有看过我写的博文就知道我写的第一篇博文就是CentOS 7系统的安装,不过是在虚拟机中安装的,而且还是直接加载镜像文件进去的,不过这次我就通过PE来安装,来证实下PE是否可以用来安装Linux系统 ...

  6. latex中使用listings显示代码

    \documentclass[12pt,a4paper]{article}\usepackage{ctex}\usepackage{listings}\usepackage{xcolor}\begin ...

  7. centos7 安装python3.6 脚本

    shell 脚本自动安装python3 # /bin/bash cd /opt yum groupinstall "Development tools" -y yum -y ins ...

  8. git的基本用法——我的日常使用

    git的基本用法 一,前言 网上有太多关于git的用法说明,而我看得云里雾里,可能是本人比较愚笨.平常时间老问别人又觉得很不好意思,估计大多的同学们都是自己解决.后来我想到了买一本书,淘宝上git书籍 ...

  9. Echarts X轴 Y轴 线的类型、颜色、及标签字体颜色 设置

    // 人均效能 var initRjxnChart = function () { var rjxnChart = echarts.init(document.getElementById(" ...

  10. 外网如何访问web项目holer实现篇

    外网访问WEB 内网主机上安装了WEB服务器,只能在局域网内访问,怎样从公网也能访问本地WEB应用? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装Java 1.7及以上版本 ...