会跳的类似金豆子集团的生物 在一个平台上跳 玩家操控 每个地方跳完后就下一关 这个游戏是什么

这一篇 1.4 为了调节阅读体验给出┅些我上我也行的教学关卡设计,仅供娱乐;另外给出上一篇中没写的定量计算的过程

1、“树洞可以传送Ori”机制的差劲教学

2、“树洞传送可以刷新二段跳”机制的差劲教学

3、“树洞传送后动量不变”机制的差劲教学

4、“动量不变”机制的定量计算

1、“树洞可以传送Ori”机制嘚差劲教学

使用树洞连接一段不能通过的区域,在出口放置一个回血奖励

这样的设计非常的简单、粗暴、无聊,回血奖励甚至有点侮辱智商的感觉玩家只能按照非常死板的路线前进,整个过程也不好玩即使很短也会伤害游戏体验。

使用多对树洞连接一大片区域让玩镓多次通过树洞来学习机制。

虽然可以通过反复经过树洞来保证玩家学会了机制但是整个过程非常无聊,几乎没有意义而且也容易迷蕗。

1.3、优化上一个教学设计

在顶部区域增加小怪两只(一个悬挂空中吐子弹的小怪一个来回爬的小怪),在中部左侧增加一个回蓝道具在中部右侧增加一个回血道具,让玩家即使打完小怪掉血了也可以回血改善整个过程的体验。

实际上树洞的机制设计更加偏向于平台跳跃而非平台动作回想一下,在游戏中树洞大部分情况下都是与小怪离得较远的将有树洞的跳跃和战斗的部分分开了,使得玩家更能專注于树洞的机制而非更加刺激的战斗部分

给出前面的小关卡中小怪出现的截图如下,可以看到小怪的放置基本上都离树洞比较远

给絀后面出现战斗部分的截图如下,可以看到后面也是分开了战斗和有树洞的跳跃

另外在银之树两侧和银之树逃亡关卡,树洞与小怪大部汾也是分开布置的(除非是为了引导路线)图片很多就不再列举了。所以简单地添加怪物虽然可以改善体验但并不能提升教学效果。

與1.2的教学结构类似但是改变树洞的对应关系。

以最开头的一组树洞为例玩家会按住右方向,进入树洞并且下意识不会松开方向键,嘫后从正上方的树洞出来后因为按住了方向键又会回到下面的树洞中然后又会进入到上面的树洞中,如此反复

因为奥日中没有这样扭曲的设计,给出传送门中一个类似体验的视频

实际上这样设计树洞之间的对应关系,不仅能让玩家学会“树洞可以传送Ori”的机制还能讓很多玩家顺带学会“树洞传送后动量不变”的机制呢(笑~)。

一部分玩家会在树洞传送的瞬间快速放开方向键等从树洞出来、隐约从樹洞的光芒中看到了自己的位置之后在改变方向移动;另一部分玩家会跳入树洞中后松开方向键,利用动量不变的机制来让自己从树洞中跳出来然后再开始移动。

这样设计虽然确实可以起到足够的教学效果但体验实在扭曲,除了整个游戏都是设计得恶意满满的风格的游戲之外应该不会出现在正常体验的游戏中。

回顾上面1.1~1.4的设计为了教学树洞的“树洞可以传送Ori”的机制,基本上没有考验和应用Ori的其他能力实际上这一部分已经不是游戏的开头了,即使是教学也应该设计得有趣,而这一机制又朴实无华到了很难单独存在让关卡有趣的程度这就需要考验到其他能力。

见上图移动和跳跃算是游戏的基本机制,再划掉战斗用的精灵之火能力和除了硬性要求以外没人用的充能烈焰能力所以在第一个小关卡中,就主要运用贴墙跳和二段跳的考验来设计教学关卡使得整个教学变得有趣。

现在我们对于关卡設计的稍高层次的思路有了一点了解可以回想一下在第一个小关卡中是如何设计来保证玩家重复学习又不枯燥、同时抑制其他机制的,這一部分学会了可以勉力一试的话剩下的设计速通路线、画面引导的部分就是更远话题了,而且也需要在引擎中尝试、和美术沟通

2、“树洞传送可以刷新二段跳”机制的差劲教学

设计一段使用二段跳+树洞+二段跳的路线,在下方放上刺右边放回血道具。

不需要测试就鈳以预见到无法达到教学目的,因为玩家不需要完成二段跳+树洞传送+二段跳的操作完全可以落到刺上掉血以后再起跳,不会死也没必要囙头也就无法学会“树洞传送可以刷新二段跳”的机制。

如果连续放置多个下图关卡部分并且去掉后面几个回血道具,可以起到教学目的但非常粗暴和重复,体验很差

使用岩浆来代替上面的刺,让玩家必须二段跳+树洞传送+二段跳

确实可以达到教学目的,但是银之樹内部是不会出现岩浆的不但没有岩浆,整个银之树的过程中都没有即死的伤害也就是说,不能通过简单地添加即死的机制来完成教學

2.3、抬高树洞、降低刺的高度

既然已经无法简单地放置障碍来让玩家学习,还可以修改高度来让玩家反复操作如果不成功就要重新来過。

下图的上半部分是需要二段跳+树洞传送+二段跳的操作部分从树洞出来后不二段跳直接落下,会吃到一个经验光球奖励然后落到刺仩,反应迅速也可以快速二段跳避免落到刺上

经验光球不能从下方直接吃到,必须从树洞出来之后才能吃到可以让玩家反复经过上方嘚教学部分,吃到经验光球后下面就是刺需要再次二段跳来躲避,反复暗示几次后玩家就可以理解机制实现教学。

树洞上方需要放置刺来避免玩家在左侧树洞使用贴墙下滑进入树洞然后离开树洞二段跳的操作;右上角出口平台放置刺是需要玩家离开树洞后快速使用二段跳,而不是很晚才使用二段跳+贴墙跳避免不需要使用二段跳就可以贴墙跳跳上去,断了玩家“是不是我方向键按得不够用力跳得再遠点就可以贴到墙上”的想法。

尽管下面的关卡可以实现教学目的但是非常单薄,不论玩家水平高低都至少要走两遍,没有为高手留丅操作的空间可以说设计得太浅了,而且也非常刻意;另外左下角很明显需要填上一些内容避免太空旷了。

把顶部的树洞直接贴到上方墙壁在树洞下方放一个悬挂空中吐子弹的小怪,同时将下方修改成为几个刺+安全平台的组合左上角平台放置回蓝道具,右上角出口依旧放置回血奖励

通过小怪给玩家战斗的体验,另外更重要的是将小怪放置得靠上一点,使得玩家必须走到下方附近的区域才能攻击箌小怪这时小怪的子弹角度会逼迫玩家左右走位躲避,可能掉到刺上强化玩家对下方刺的位置的认知,这样玩家在离开树洞、吃到经驗光球之后能更快明白需要跳跃来避免落到刺上

左上角放置回蓝道具是为了让玩家在完成战斗(可能掉血)之后,在需要教学的起点位置下意识存档回血后续即使没能完成预定的教学操作,也可以快速跳到刺上自杀回到左上角存档位置

尽管通过修改设计解决了2.3中左下角太空旷的问题,但是没有解决关卡太单薄的问题高手也没有太多可以操作的空间。关键教学部分的过关方式实际上是唯一的会使得無法理解“树洞传送可以刷新二段跳”机制的玩家卡关,尤其是经验光球下方的刺的暗示玩家不一定会明白即使落到刺上掉血了,玩家吔可以再次存档恢复尤其是,在空中下落状态玩家是可以自己操控左右位置的为了重复教学抬高了树洞,使得玩家完全不需要二段跳、只需要调整左右位置就可以使得自己不必落到刺上这样一来,不懂的玩家就会卡关教学部分依然会显得非常刻意。

为了重复教学提升了树洞的高度->玩家只需要在空中控制左右即可避免落到刺上->对于离开树洞后刷新了二段跳的暗示不够强->教学设计得过于刻意

当意识到上述一系列问题的连锁反应之后即可明白这一设计思路指导下的关卡需要重做了,因为涉及到空中移动速度这种手感的参数是很早就确定嘚不会因为小小的一关而修改。除非通过口舌之利忽悠住了水平不高的关卡主策或者整体大家的水平都很一般,这一关才会有可能鱼目混珠放到游戏中但是玩家数量巨大,依旧会出问题这里设计妥协了、那里又有没考虑到的操作,这种情况一多整个游戏的品质就丅降了。

现在回想第二个小关卡的设计不仅提升了树洞的高度。还把树洞做成一整列放在最右和最左侧让玩家注意力没办法快速切换找到自己位置,结合带有回转的刺的悬空平台一起使用逼迫玩家快速起跳,在落点放置了一个反向倾斜的平台还压缩了底部的安全区域,共同作用实现了“水到渠成”一般的教学效果,玩家不需要能说出具体的机制作用而是直接就在应用机制来操作了(再次二段跳來获得观察位置和调整位置的时间),可以说真的懂了关卡设计也真的达到了教学目的。另外还为高手玩家保留了足够的操作余地,為不同操作习惯的玩家设计了其他的过关方式这种设计理念和设计水准,可以说极高了

(小声BB:可见关卡在主导着项目的设计,发起叻大部分的需求不然这种回转刺的平台的需求提了也没人理你,或者隔很久才给你做出来等得你灵感消失了,久而久之你提需求也会懈怠关卡设计水平切切实实就下降了)

3、“树洞传送后动量不变”机制的差劲教学

3.1、无脑从传送门中抄过来

不需要实际测试,就可以预見到玩家如果在下落过程中二段跳了,速度就不够到达右侧的平台就会卡死。

把右侧下方的刺换成安全的地面但是墙壁仍然是刺,避免玩家贴墙跳跳上去另外增加一组树洞可以让玩家回到初始位置。

实际上整个操作过程要求玩家不能按跳跃键,不然损失了速度僦无法完成预定的轨迹。而“不能按跳跃键”与整体游戏的感觉是相违背的平台跳跃过程中可以考验玩家跳跃、二段跳的时机和位置把握,但是考验玩家“不能跳跃”就会伤害到游戏整体的感觉所以直接无脑从传送门中抄过来教学并不可取,究其原因是第一人称射击与2D岼台跳跃的关卡设计思路差别很大不能无脑抄袭。

3.3、换另外一种思路使用子弹来演示动量的变化

如下图所示,在场景中放置一组相互垂直、以红色虚线轴对称对应关系的树洞并使用墙壁、树木之类的分隔开左右树洞,花吐出来的子弹会从以45°角进入左侧树洞,轴对称之后以45°离开右侧树洞,竖直向下飞到机关把手处。玩家要扳动机关把手,就必须要躲避从上方飞下来的子弹。当扳动把手之后,两个树洞一起逆时针旋转45°,这时花吐出来的子弹就会垂直进入树洞,并水平离开树洞后击碎右侧的树木,成功过关。这里既可以体现速度大小不变(子弹的飞行速度没有变化),也可以体现速度方向不变的机制(子弹进入树洞的角度和离开树洞的角度相同)

这样的设计虽然能够教學“树洞传送后动量不变”的机制,但是使用了花吐出来的子弹+树洞的组合来教学使得游戏的教学顺序变得混乱,在游戏中是先教学了樹洞对于Ori的作用机制后面才教学了树洞对于物体和子弹的作用机制,所以依旧不能用

上面关卡设计的灵感实际上来自于传送门1中的一關,如下图所示传送门中的子弹在撞到墙壁后会反弹、玩家也可以自己选择传送门的放置位置,所以需要稍作修改树洞位置和变化方式

不能违背“先教学树洞对Ori的影响后教学树洞对物体和子弹的影响”的顺序 -> 不能有物体和子弹经过树洞的部分

玩家在空中下落时可以自由妀变左右 -> 实际上是在改变水平的速度

考虑到上面两点,再考虑到树洞是预先放置的玩家几乎很难对树洞的位置或角度造成影响,如果设計教学动量中的速度方向就会是一次性的很难达到预期的教学效果,所以剩下的关卡设计方案实际上只剩下一种就是体现对竖直方向嘚速度大小影响,也就是使用弹跳平台+朝下树洞的组合

因为已经有了游戏中的关卡设计,现在讨论颇有事后诸葛亮的感觉不妨自行做絀一个教学关卡如下图所示。

将树洞的出口和入口放置在了同一个小关卡中实际上对玩家的注意力要求很低,玩家很容易就能发现自己從关卡这一半传送到了另一半很快就能找到自己的位置,二段跳就完成了这一部分如此容易就过关了,没有反复的过程也就很难达箌教学的目的。

回想游戏中将树洞的入口和出口分别放置在两个小关卡中使用镜头的切换来最大程度上保证了玩家反复操作达到教学目嘚。同样是玩家不必理解机制到底是什么而是直接在使用机制来观察和思考二段跳跳到中间平台的时机和落点,不着痕迹就已经教会玩家了。

看似上面的关卡设计已经有点接近游戏中原本的关卡的感觉了实际上还差了不少,而且还是因为已经有了最佳答案照葫芦画瓢搞出一个差一点的也不难,如果是摸着石头过河自己尝试中间必然还要走很多弯路。

4、“动量不变”机制的定量计算

如上图所示可鉯将整个过程分成3个阶段:自由落体、平抛运动、斜抛运动。

后两个阶段的运动可以分解为水平方向的运动和竖直方向的运动

第三个阶汾解得到的竖直方向的运动是一个竖抛运动,可以认为是一个逆向的自由落体运动和一个正向的自由落体运动两部分组成

另外给出没能實现关卡设计原因的演示:仅仅改变视角方向,也会对运动造成改变

大家好还原蔚蓝最重要的一篇終于来了,真是花费了我不少心思

可能有朋友疑惑,为什么我要在标题中加一个“真”字大家如果对蔚蓝感兴趣,并且尝试过想要还原蔚蓝的同学一定查阅过各种资料但是现在网络上的大部分“类”蔚蓝项目都几乎只是做了简单的移动、跳跃、冲刺、爬墙等。完全没囿还原到蔚蓝的庞大的细节所以本次“真”移动篇就将把蔚蓝中的各种细节展示给大家,并且尽我所能地将各种细节还原

本文主要讲解移动,动画、特效等尚未添加请见谅。

当然由于本人技术有限虽然有源代码支持,但我并没有完全参考所以并不能完全完美还原原游戏手感,只能用简陋的方法进行尝试所以大佬们有什么意见和建议都请不要吝啬的向我提出,谢谢完整项目工程在本文最下方。

囸片前的最后请让我感谢对本项目影响最大的视频,所以本文会有多处引用到了该视频中的信息请留意:

本次项目需要一个完全不能穿墙,并且能够精确操控的移动方式所以用AddForce,或者velocity等方法是很难精确控制角色并且有概率穿墙。全程用 transform相关的移动方式又需要做太多嘚判断比较难写,而且容易出问题所以决定使用Rigidbody.MovePosition(Vector2 position)来进行移动,同时修改Rigidbody2D的Collision Detection为Continuous防止高速移动时角色穿墙用Composite Collider2D将Tilemap合并,使碰撞盒更加岼滑顺便一提,现在黑色主题已经对所有用户开放大家还不赶紧去试试?

主要用状态机的方式来控制角色在各种状态间的切换另外為了控制篇幅,本文大部分代码都不是完整代码完整代码详见文末链接。

我们知道通过input.getaxis可以模拟摇杆的输入输入会从0到±1之间变化,僦能模拟移动和停止惯性但是我们却不能准确的操控惯性的大小,所以加速和减速需要重写代码控制具体方法详见3.1,这里输入只需要返回0±1即可。所以重点就是需要什么时候返回这三个值

通常是按下右键返回1,按下左键返回-1但如果左右键一起按应该返回什么?在unityΦ一起按是返回0而在蔚蓝中,总是返回后输入的按键所以在这里需要手动判断返回的值。

//<= 0说明按下左键或者没有案件判断这时是否按下了右键 //...同理左键判断 //...同理左键判断

如果在落地前几帧之内按下跳跃键,游戏应该要记住指令使角色仍能在落地后跳跃这会让角色跳躍的更加顺滑。为了精确到帧的控制可以通过把一个int变量放在FixedUpdate里每帧减1来控制。在按下跳跃键时开启一个帧数倒计时如果落地后该int变量还不为0则仍然返回true,即按下跳跃按键

主要移动代码为如下,velocity的值就相当于角色的速度


  

从上文中提到的视频中可知,角色是6帧达到满速然后只用3帧就可以停下,但是这里的1帧是多少秒呢

我尝试用1秒30帧,即0.2s到达满速0.1s停止测试了下手感,发现有明显的惯性所以猜测原视频是以1秒60帧为基础。为了尽可能还原我将FixedUpdate的刷新频率也设置成了1秒60次。

除此之外还有一些细节角色在空中加速和减速的时间都是仳在陆地上的慢。蹲下时是不允许左右移动陆地上移动时按下下键,也是会进入蹲的状态不允许移动都是一些判断,再次就不详细赘述了

由于没有用到unity自带的物理引擎,所以需要模拟重力以自身碰撞盒为大小向下打射线,同时忽略玩家层当然为了以后的爬墙、手感优化等,自身四个方向上都需要打射箭进行检测

当角色处于可落下的情况,并且射线检测不到地面时开始添加重力设置一个最大坠落速度

爬墙有两种情况,一种是有耐力并且按下爬墙键会紧贴在墙上,如果按下墙壁方向的方向键同时不按爬墙键或者没耐力了就会沿着墙壁下滑。

实现也很简单将我上面描述的转换成if语句就行,由于在墙上不会移动x轴所以移动是修改velocity.y来实现。详情可参考完整工程这里就提一下爬墙的两个细节。

1、如果在墙的边缘垂直起跳从进入爬墙状态起会滑落一段距离。

2、如果在墙的边缘按上键会自动将玩家移动到平台上。

1的方法是获取自身位置与碰撞点y轴的差距如果大于一定值就滑落,这里我忽略了耐力

2的方法同样是获取获取自身位置与碰撞点y轴的差距,如果小于一定值并且按了上键就自动跳到平台上自动跳跃我用协程的方式实现。

//如果爬在墙的最上端要么自动跳到平台上要么滑落一段距离 // 攀爬到墙壁最上沿时如果有可跳跃平台,则自动跳跃到平台上

因为跳跃是本游戏最重要的部分所以先来介绍一下冲刺。

在蔚蓝中冲刺的前0.15s是不允许移动的,所以冲刺也是通过协程来实现

在冲刺前我们要获取到冲刺方向,这里有几个小细節什么都不按的情况下按冲刺是以角色当前方向进行冲刺,在地面上按左下或者右下冲刺时是普通的横向冲刺

//获取输入时的按键方向
 //沖刺方向注意归一化
 //没有按方向键就朝玩家正前方冲刺 

用Time.time来控制时间是很不准确的,会出现冲刺距离时远时近所以在协程里想要精确到幀的控制可以使用WaitForFixedUpdate。0.15s在1秒60帧的情况下就是9帧

虽然在冲刺的0.15s中不允许操控,但有些情况下是可以跳跃的所以会切换到跳跃状态,这时不能停止冲刺的协程因为还要等循环结束把操作权还给玩家,所以在代码中加了一个判断当前在冲刺状态时才给角色冲刺速度。

冲刺的時候为了使移动看起来更加顺滑会在碰到各种碰撞的边缘处进行处理,看一下动图就明白了

当角色在移动中碰到碰撞体的边缘时应该偠像果冻一样划过去。当然不只是在冲刺中会用到跳跃时也会用到。实现原理:当前玩家位置与碰撞点位置之差来判断是否应该对位移進行修正图中黄线的一端就是上次碰撞点的位置。由于地图使用tilemap进行绘制所以瓦片的位置都是能够确定,在此基础上进行修正

//检测囸上方的唯一修正
 //获取自身与碰撞点的x轴距离
 else //其他情况就是碰撞到墙壁,切换为落下状态

跳跃是蔚蓝的灵魂也是全篇最复杂的部分之一,这里我略微的参考了游戏源代码

蔚蓝中跳跃是会有一个最小跳跃高度和最大跳跃高度,并且跳跃分成了三个阶段:

2、到达最小跳跃高喥后如果仍然按主跳跃键则继续升高阶段

3、到达最高点或者放开跳跃键后的减速上升阶段上升速度为0时切换到落下状态。

跳跃也是用协程进行实现首先来看第一个阶段。vel.x为传入的横向加速度maxVel.x为最大横向加速度,在下文蹬墙跳中实现横向加速跳跃


 //获取当前角色相对于初始跳跃时的高度
 //vel.x为横向加速度,是为了在蹬墙跳的时候提供一个横向的加速移动效果

在这段代码中加入了蹬墙跳跃的方法这里就一并說完。

再上图中我们可以看到4种在墙上的跳跃方式

1、按住爬墙键并且有耐力的情况下只按跳跃键会垂直向上跳。

2、在上一条的情况下按反方向键和跳跃是蹬墙跳

3、处于在墙壁上滑落状态时按下跳跃键也是相同效果。滑落状态也分两种一是按住爬墙键但是没有耐力,二昰不按爬墙键时而是按下墙所在方向的方向按键。

4、在空中靠近墙壁时只按下跳跃键,会有一个比蹬墙跳稍近一些的蹬墙跳顺便一提,这种方式跳跃不会消耗体力所以蔚蓝中有个高级技巧,无(消耗)体力上墙就是通过这种方式实现

//蹬墙跳,这里暂时忽略了耐力
//茬爬爬墙状态下按下跳跃键

第四种情况只会在落下或者跳跃时触发,将修改下数值调用即可


第二阶段如果仍然按下跳跃键,并且跳跃高度小于最大跳跃高度时

 //上文所说的第四种蹬墙跳检测

在这个阶段中添加了对蹬墙跳的检测,此时y轴方向的速度仍然是跳跃速度

第三階段,减速直到向上的速度为0

//如果跳跃到最大高度是重力是其他情况的一半

减速阶段也有一个小细节,跳跃到最高处时重力会减半这會使玩家更加方便的操控角色。但是由于这段时间比较短gif并不能展示出比较好的效果,这里就不做展示

只有以上部分是不足以完全还原蔚蓝的跳跃,因为在游戏中玩家的跳跃是会叠加的也就是说如果在冲刺的时候按下跳跃键,跳跃时是会叠加冲刺时的速度横向上比較简单,垂直方向上我们也只需要把最小跳跃高度和最大跳跃高度计算一下即可


  

最后就是各种冲刺和跳跃的叠加操作了,充能大跳、低涳充能大跳、蹭墙跳(7B技巧)、“凌波微步”等操作技巧最多就是修改下传入参数即可

在蹭墙跳跃中还有一个细节,因为原本就是一个仳较难的操作所以制作人为了优化将此时的墙壁检测放大了一下,即平常离墙壁比较远不能蹬墙跳的位置蹭墙跳可以触发。

最后就用┅个在平台跳跃游戏里比较常见的细节来结束吧在人物离开平台的后几帧时间里,玩家仍然能跳跃当然实现方式也非常简单,在从普通移动状态切换到落下状态时记录一个int变量同样的在FixedUpdate每次减1来控制在几帧内仍可以跳跃。只需要注意此时要把垂直方向上的速度清零

玳码就不展示了,直接上效果 为了展示的更加清楚我将这个时间设置的比较长,蔚蓝中设置的是3帧

展示效果,实际只有3帧

当然游戏细節尚不止如此还有许多诸如冲刺时碰撞体缩小,在空中按住下加速下落关于刺的细节等等。引用上一篇评论那5000行代码标志着目前横蝂跳跃类游戏的天花板。我也只能尽力模仿努力学习。

内容不多但是为了实现反反复复的修改了很多遍,而且由于蔚蓝源码所使用的潒素比例和本项目中用的不一致所以各种参数也不能完全参考,修改参数也是修改的我心力交瘁最后虽然是完成了一部分的移动和手感,但离我理想仍有不少的差距接下来的一篇应该就是,动画、特效、镜头添加死亡状态添加,现有的移动继续完善等不过这部分僦比较简单,应该会比较快吧

对游戏开发学习感兴趣的盆友,欢迎访问:

同时也欢迎加入游戏开发群搅基:

我要回帖

更多关于 金豆子集团 的文章

 

随机推荐