

























一、角色移动
角色在2D场景中的移动,无论是踱步还是奔跑,实际上最终都是达成了角色在水平方向上的一段位移。然而角色何时应该均匀地,缓速地慢慢移动;何时应该加速地,飞快地跑动;以及这些移动模式之间如何切换,都是值得讨论的问题。
1.角色的起步与急停
当玩家按下移动键时,角色是否会立刻进入移动状态,玩家松开按键后,角色是否会立刻停下;以及这从站立到移动再从移动到站立,是否有会有一个加速和减速的过程。这些微小的设置,往往是影响一个平台跳跃游戏的重要因素,因为玩家不可能只通按下跳跃就能通关:从蘑菇城堡到酷霸王的据点,从山脚到巍峨山峰的顶部,玩家需要移动才能前进。
而这些设置,让角色的移动看起来更自然,也很大程度上影响了移动的手感。
比如在蔚蓝中,角色的起步与减速都被设置的很短,短到在一般情况下不会被注意,然而这些时间也足以给Madeline一些动画来表现她重心的移动和头发的随风飘荡;这就使得蔚蓝的移动在保证了掌控性的同时,让角色的移动看起来并不僵硬,使得这些动作简洁明了。
而在马里奥中,角色的加速和减速过程在被制作者精心地调配过后,就变成了其远近闻名的,脚底抹油的手感。这自然和刚才说的起步急停脱不了干系,我们便以此为例。
private void Move() { if(Mathf.Abs(inputAction.x) > 0)//检测玩家是否输入移动 { timeElapsed_dc = 0; if (timeElapsed_ac < accelerationTime)//根据加速时长线性增加速度 { timeElapsed_ac += Time.fixedDeltaTime; float t = timeElapsed_ac / accelerationTime; currentSpeed = Mathf.Lerp(currentSpeed, normalSpeed * Mathf.Sign(inputAction.x), t); } else//如果达到最大速度,就保持 { currentSpeed = normalSpeed * Mathf.Sign(inputAction.x); timeElapsed_ac = 0; } } else if(Mathf.Abs(inputAction.x) == 0)//如果检测到玩家不在输入,则开始减速 { timeElapsed_ac = 0; if (timeElapsed_dc < decelerationTime)//根据减速时长线性减小速度 { timeElapsed_dc += Time.fixedDeltaTime; float t = timeElapsed_dc / decelerationTime; currentSpeed = Mathf.Lerp(currentSpeed, 0, t); } else//如果减速到零,就保持 { currentSpeed = 0; timeElapsed_dc = 0; } } rb.velocity = new Vector2(currentSpeed, 0);//最终将新的速度传递给游戏物体 }
从这段代码来看,我们简单地实现了角色的起步和急停。当玩家进行移动输入时,角色会以固定速率开始加速并最终达到最大速度;同样也会在玩家停止输入后慢慢减速。其中有几点值得注意:
角色的速度变化是通过设置整个变速过程的时长,用Unity提供的Lerp函数来每帧线性增加的,而并非通过设置加速度来每秒增加。这是因为后者虽然更贴近我们物理上的想象,可这实际上却不如前者的加速丝滑,也容易导致角色的速度不能很好的保持在最大速度上,因为在实际情况下,角色可能走走停停,很容易出现最终速度总是比最大速度大一点的问题。
角色的变速时长是以帧数为单位计算的,通过Unity提供的固定时间步长Time.fixedDeltaTime(通常是 1/50 秒)来将秒数转换为帧数。这样做的原因是加速时长很多时候也是由加速动画的长度决定的,这样做可以更方便地确定变速时长。
看完这段代码,我们再来聊聊马里奥的设计。实际上在最新一代的马里奥惊奇中,这种滑溜溜的手感得到了一些很适当的收敛,使得这位红鼻子大叔的移动在保持了原汁原味的基础上,变得更容易上手。在前几作,角色的加速和减速过程都很长,尤其是减速的过程,角色是在前进的同时慢慢减速停下,就导致玩家在松开摇杆后,角色仍会向前滑动。然而在这一作,角色的加速初期变得更快,减速也更容易停下,尽管仍旧会慢慢向前倒腾几步,但明显玩家对角色的操控感好了很多。
并且,马里奥里的角色并非所有时候都会脚底打滑。其中尤其重要的是,角色只会在玩家沿着某个方向一直移动而方向不变时,才会在停下时有一个减速过程。当玩家在正常前进时突然转向,角色也会立刻转向,和马里奥的其他动作相比,这个转向的进行简直是如闪电般迅速。这就使得玩家不会在需要立刻掉头的时候觉得自己明明已经拨动了摇杆,却只能眼睁睁看着角色滑入无底深渊(冰面关卡除外),从而让这个滑溜溜的手感只停留在游戏特色的地步,而不会成为影响玩家游玩体验的门槛。
2.角色奔跑
双重加速过程
加速转向
奔跑时忽略地面缺口
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。