3D动作游戏做个跳多难当我们谈论跳跃时,我们到底在谈论什么?
当我们提到3D动作游戏时,我们可以想到许多著名的游戏,例如《怪物猎人崛起》和《埃尔登之戒》。可以说,3D动作游戏和ARPG正在逐渐成为主流游戏模式。说到动作游戏,人们就会想到“跳跃”功能。毕竟“跳跃”对于动作游戏来说是一个非常重要的元素,至少是2D动作游戏,越来越多的3D动作游戏以及ARPG也加入了跳跃功能。
那么,作为游戏开发者,当我们谈论3D动作游戏中的“跳跃”时,我们到底在谈论什么呢?很多人听到这个词的时候,脑海中的画面就是平地上一个角色跳得很高然后落地。 —— 这确实是“跳跃”功能最直接的表达,但对于游戏开发来说,这只是“跳跃”的冰山一角。因为有跳跃,就意味着有“漂浮”和“地面”两种状态,这会带来很多新的东西,形成很多新的玩法,也给游戏功能的实现带来很多。麻烦。
3D动作游戏中的跳跃功能能为游戏带来什么?
当我们决定在3D动作游戏中添加跳跃功能时,就会有两个基本属性:——地形高差和空战。基于这两个属性,在关卡设计和其他细节方面还可以有许多进一步的属性。可以细化。
地形高差
跳跃功能能够带来的最直接的效果之一就是地形高度的差异。这种地形高差与早期《怪物猎人》系列(从4代开始)和《古墓丽影》系列游戏中的地形高差概念不同。 —— 早期《怪物猎人》系列中的地形高差是指在某些特定的地方存在一些特殊的地形。当玩家操作角色在这些地方移动时,会自动从下到上进行攀爬动作,从上到下会自动进行跳跃动作。
在最新一代的《怪物猎人崛起》中,由于加入了飞虫,游戏相当于自由跳跃,再加上攀岩等功能,使得《怪物猎人崛起》拥有了真实的地形差异,只不过这个地形的高度差异确实只有切换地图的意义,但没有实际的游戏意义。例如,——为玩家提供了从高位战斗的优势,这是《怪物猎人崛起》中所没有的。一旦玩家的位置太高,怪物就会无法攻击玩家,就会改变画面。
因此,良好的地形高差的作用就是让玩家利用高地优势和低地地形优势来获得战斗优势,而玩家则利用跳跃技能(在大多数动作游戏中,往往有不止一个动作可以具有跳跃效果,在正确的时间选择正确的动作进行跳跃是一种技巧),可以在各种地形之间穿行,并在当时的情况下获得优势。这是由于地形的高差造成的。与只有平地的玩法相比,多了一层深度。
空战
既然有了跳跃,那就有了空战技能。在传统的2D动作游戏和格斗游戏中,跳跃是有效的进攻渠道。在《Elden Ring》等3D游戏中也是如此。跳跃、劈叉等等,都是非常主流的玩法。
空中跳跃所能发动的攻击,远不止向下斩击那么简单。很多游戏还拥有各种华丽的空中连击,让玩家玩得尽兴、欣赏得尽兴。
因此,跳跃创造了“空战”的维度。不仅可以拥有空对地技能,还可以拥有空对空技能,让玩家将空中和地面结合起来,创造出更加美丽华丽的招式。这也是跳跃所带来的。游戏玩法。
由此延伸出的各种问题及解决方案
跳跃的存在给我们带来了一些新的属性,这很好,但是当我们真正想要实现这些跳跃的内容时,就会延伸出很多麻烦的问题,主要包括:
悬崖坠落问题
由于地势高差,必有“悬崖”。既然是动作游戏,就会有很多带有位移的动作。甚至一些ARPG游戏也难免会有这样的技巧。在悬崖上使用位移技能可能会导致角色从悬崖上掉下来。虽然并不是所有游戏都会遭受坠崖受伤等直接损失,但如果不小心摔倒,处于劣势,玩家也不愿意这样做。因此,玩家必须依靠自己的熟练程度来克服悬崖边缘的问题。不就是因为开发者帮助玩家确保某些动作永远不会掉下悬崖,会推向悬崖边缘。
“保证一些动作不会掉下悬崖”说起来很容易,但是“如何保证一些动作不会掉下悬崖”呢?这是一个非常难制作的细节,因为在3D动作游戏中,我们没有一个很好的逻辑来解释“下一帧要去的位置是悬崖”。因为我们要防止角色在使用技能时掉下悬崖,所以我们必须知道这一帧我们没有掉下悬崖,但下一帧就会掉下悬崖,所以我们需要一个逻辑来判断是否从悬崖上掉下来。乍一看,逻辑可能是他在这一帧中站在地面上,而在下一帧中他没有站在地面上:
但这个逻辑也适用于角色跳跃:
所以我们不能只靠这个逻辑来判断角色是否掉下悬崖,然后停止角色的移动,一味地停止角色的移动,哪怕只是水平方向(ue的xy方向,在Unity中) xz方向的移动)也会导致跳跃动作原地跳跃,所以我们只能再加一种,即水平移动或者垂直方向向下移动(ue的z方向,unity的y方向)。此时如果xy方向有移动,会导致这一帧你站在地上(脚下有障碍物),而下一帧你脚下没有障碍物,则停止xy方向的运动。但这种方法只适用于悬崖边缘的水平地面。如果地面是这样的:
所以如果我们启用这个方案是为了防止角色冲下悬崖,那么我们在编辑地图的时候就得注意悬崖附近的地形问题。
一般来说,在《怪物猎人崛起》这样的游戏中,为了保证玩家跳下悬崖时会做出悬崖跳跃的动作,会在悬崖边缘拉一个碰撞箱。进入这个碰撞箱将会导致玩家跳下悬崖。角色自动做出跳下悬崖的动作:
这样的设计和上面的做法完全冲突,因为我们很难知道角色下一帧会遇到碰撞盒(需要遍历世界各地的碰撞盒来预测角色是否会遇到)下一帧就遇到了,毕竟““撞到盒子很容易”,但“不撞到盒子”就很难预测了)。即使知道,因为这个碰撞盒也有宽度,所以会导致角色在距离悬崖很远的地方移动和停止,看起来很不自然,所以正常的动作游戏也放弃了不掉下悬崖的风格,而且相对来说,掉下悬崖更自然更好设计上,只要把战斗区域做成不太容易进入的(不能绝对保证,但能尽量保证)在悬崖边上就可以了。
悬崖问题
看似与上一个问题相反,但实际上却大不相同。这个问题的根源在于——的每一个动作,冲出悬崖我们该怎么继续?这是地形差异和空战技能带来的混合问题。
首先我们要保证有一些技能是可以随时冲出悬崖的。即使我们使用上面的算法,仍然有一些技能会自己离开地面,所以他们应该能够冲出悬崖,所以冲出悬崖之后,就有一个接下来该做什么的问题:
和KOF、饿狼类似,特里著名的扣篮应该是一个会飞下悬崖的动作。
这里涉及到两个方面。首先是这个技能飞下悬崖后的移动轨迹应该是怎样的,因为这个技能本身可能是一个角色稍微脱离地面,但是飞得更向前的技能:
或者比如说类似于特里的拳击的技能。他的轨迹就是这样,稍微离开地面,然后向前冲去。那么如果在悬崖边上使用,它应该遵循什么样的轨迹呢?
轨迹A是原路线的延续,因此当前的动作会持续下去,直到动作到达地面。最终,只要悬崖足够宽,飞到哪里就成了只有天知道答案的事情,所以显然不是没有玩家能够预测一个动作的大致结果的。这是一个非常危险的设计。
C是完成动作后直接变身摔倒动作,摔倒。这并不是不可接受,但它是最不可接受的,但却是最容易实现的。
B轨迹得到了一定程度的修正,这看起来是最合理的,但问题来了,这种下降的依据是什么?如何执行?使用RootMotion的时候,有一个问题就是整个动画有多长。如果你使用类似于UE中Montage的Section来做一个Loop,你需要做一个每次Loop落下时增加的AnimNotifyState。这看起来问题已经解决了?不,问题只是一个开始。 —— 这个AnimNotifyState如何让这种事情(每次都变得更重)发生在普通的移动系统中?
这里我们要回到运动系统。为了保证某些动作的上升高度是预设的,或者某些动作必须始终保持水平移动,我们会在有RootMotion(或其他信息)时让动作移动。角色本身向下的重力不生效,形成“飞行状态”。我们可以明显看到特里的出拳阶段(或者说按照要求打出出拳循环的阶段)应该处于“飞行状态”,那么我应该在哪里添加下落的力量呢?那么我们是否需要创建一个力量来做到这一点?这当然解决了我有一种力量保证让我一直下去的问题,但问题是,这种力量什么时候结束?因此,一系列的问题让这个看似不错的B轨迹成为了最难实现的事情,因为它需要把整个动作的逻辑理清楚才可以做到。
因此,在设计技能时,不能只考虑空战技能需要循环(直到地面)
自下而上的问题
上面我们已经讨论了自上而下的问题,现在该讨论自下而上的问题了。自下而上就会出现游戏平衡问题。例如,我们想要击飞敌人的时间长度是策划者预先设定的,但由于对手的角色是在自下而上的过程中被击飞的,这会导致角色降落在更高的平台上:
当然,反之,角色从高处被击落到低处的抛物线时间应该更长。如果游戏是这样设置的话,我们当然可以将击飞动作时间从高到低设置为超过“计划预设的困难时间”就直接变成坠落动作,但是如果角色B是从下往上击飞的,他只能庆幸早点结束,或者在地上躺更长时间,但显然早点结束是更容易接受的结果。
从实现的角度来看,这是一个非常典型的bug,但从游戏设计的角度来看,这是一个“只能这样接受”的设定,只能妥协。
既然这些问题都已经解决了,那还有什么难的呢?
在实际的游戏开发过程中,很多事情即使有计划,也不一定能解决,因为计划和解决方案之间有一个实施过程,很多问题最终都因为这一层而无法解决。的实施。比如我们上面提到的冲下悬崖的问题,实际上看起来就是一个工作量的问题。您只需在每个动作中配置“角色落地检测”即可。对UE准确的方法是在每个Montage中拉一段。 AnimNotifyState,这个AnimNotifyState负责落地检测并跳转到Section,就可以完成整个工作了。听起来是一个非常简单的任务,但即使有玩家角色和怪物,整个游戏也可能有几十个角色。每个角色都有数十个动画。我们确实可以派人去做一次。看来按照计划从0到1是没有问题的。但是一旦到了测试阶段,或者某个环节出现了bug,需要我们去排查错误,UE的开发环境就会给效率带来非常致命的打击。这就是游戏开发——。很多时候我们不是在做0-1的事情,而是维护,不仅是为了新的想法,也是为了旧的错误。例如,配置这个AnimNotifyState并不是一件机械的事情。因为代码不知道为什么NotifyState被拉伸到哪里以及拉伸了多长。必须由人类来完成,但人类必须在机械化的环境中做这些事情,问题最终将难以避免。
当我们考虑整个项目(做一个完整的游戏而不是一个demo)时,我们必须充分考虑这些问题,因为海量的数据会让原本看起来可能的事情(demo可以工作)变得完全不可控。甚至可能给项目进度带来致命打击。
因此,当我们了解3D动作游戏中跳跃的难度时,请量力而行。所谓量力而行,是指整个团队的人力、财力能否支持。如果没有跳转的话,可能半年就完成了,加了跳转之后,一年半之后我还在寻找各种细节。
本文来自微信公众号:千猴马的游戏设计(ID:baima21th),作者:猴子与花果山
