CombatSample 是一个使用 Unity 制作的第三人称动作战斗 Demo。
不需要复杂的输入,却能施展功能各异的丰富招式,将敌人在地面和空中之间打来打去,不断追击,完成一场简单、连续而爽快的战斗。
也就是说:玩家只需要使用双摇杆,以及攻击、跳跃、闪避三个按键,就可以从一次普通攻击开始,把敌人从地面打到空中,随后自己也跃入空中继续追击;再把敌人砸回地面,从空中快速落地,接上最后一段强力攻击。
目前,CombatSample 已经完成了第一个 Release。
项目中的战斗设计、3C设计、敌人能力与 AI、受击反馈、框架设计、代码实现、配置与调试,均由我独立完成。角色模型、动画、特效和音效主要来自网络素材与笔试题素材。
项目使用了 Animancer、NodeCanvas,以及多态序列化和 TagTree 等小型插件。
CombatSample 最初并不是从一套明确的战斗体验开始的。
一开始,我更想证明自己能够搭建一套 ACT 框架。
我观察《鬼泣》里的指令输入、动画切换、浮空和空中连段,再尝试把这些功能逐项复现出来。当时我认为,只要角色能够播放攻击、切换动作、把敌人打上天,最后自然就能形成一套战斗。
移动和攻击会不会同时控制角色;
动画之间能不能平滑切换;
Timeline 能不能编排一整招;
输入能不能触发不同动作;
角色和敌人能不能进入浮空状态。
这些问题都需要解决,但它们本身并不能回答:
玩家最后会玩到一场怎样的战斗,或者说这场战斗想要传达的核心体验是怎样的?
真正的转折点出现在浮空系统上
原来的角色运动底层已经不足以继续支撑我想要的空中战斗。如果继续按照“看到一个功能,就把它复现出来”的方式开发,项目只会不断增加模块,却没有明确的取舍标准。
于是我开始重新思考:
我究竟想通过这个 Demo 展示什么?
从这个阶段开始,CombatSample 不再以“完整复现其他游戏的功能”为目标,而是先确定想要传达的体验,再决定需要哪些机制,最后才选择对应的逻辑和技术实现。
如前文所言,我们希望玩家只需了解基本操作,就可以开始爽快地把敌人打来打去
而为了传达这个体验,我们需要确定两点基本设计准则:
输入简单,却支持多种招式:不选择AB键组合,因为太麻烦;不选择独立技能,因为不支持多样化的招式配置。最终我选择类鬼泣的单攻击键,并且在分支、指令等部分做设计
打来打去不是让敌人一直在天上不下来:鬼泣的连段核心在与空中身位控制;我的项目则希望是敌人会不断的被击退、击飞、下砸坠地、击倒;在不同的状态间切换
我希望玩家把注意力放在战斗画面、敌人动作和接下来的追击上,而不是复杂的指令表。
复杂输入当然可以提供正向反馈,但玩家需要先经过较长的学习过程,才能开始享受战斗本身。这个过程也会筛选掉一部分不适应高门槛操作的玩家。
因此,Kiana 的核心操作被控制在几个直观输入中:
双摇杆负责移动和观察;
一个攻击键;
一个跳跃键;
一个闪避键。
输入的早晚时机;
简单的方向加攻击短序列;
当前处于地面还是空中;
连段已经进行到哪个阶段。
如果玩家愿意观察动作节奏,不再一直快速连按,而是在更晚的时机输入,就可以进入性能更强的分支。
早输入对应容易触发的普通连击。它不要求玩家严格控制节奏,可以保证最基础的操作体验。
晚输入则提供一个很简单的进阶要求:玩家需要稍微控制按键节奏,不能一直连续输入。作为回报,晚输入分支通常拥有更高伤害,或者浮空等特殊功能。
我没有增加第二个攻击键来区分两套连段,原因也很直接:
我希望操作成长来自玩家逐渐理解动作节奏,而不是逐渐记住更多按键组合。
连段过程中,敌人不会单纯处于地面或者浮空状态,而是不断在多种短流程中切换:
一段流程的持续时间很短,只允许玩家打四五段攻击,之后就打出终结切换至下一状态
受击状态切换时,要做强受击表现:敌人被击飞要仰头,砸地要弹起
每进入一个新的流程,就重置玩家和敌人的状态,降低连段门槛
因此CombatSample 的地面攻击和空中攻击并不是两套彼此分开的连段。
它们共同组成了一条连续的追击路线:
地面起手
→ 将敌人打至浮空
→ 玩家进入空中
→ 空中继续追击
→ 将敌人下砸回地面
→ 玩家快速落地
→ 接上最后的强力攻击
玩家有两种进入空中的方式。
第一种是普通跳跃。
第二种是升龙。
升龙本身是一招攻击,可以同时把玩家和敌人带向空中。如果没有升龙,玩家主要只能依靠地面 B 分支中的浮空招式进入完整空中连段。
升龙让玩家拥有了更自由的升空入口,不必每次都从固定路线进入空中。
完成空中追击后,玩家可以使用 Rider Kick 快速回到地面,继续攻击已经被下砸落地的敌人。
Rider Kick 落地后不会重新从第一段轻攻击开始,而是直接派生普通 4A。
玩家刚刚完成空中下砸和快速回地,整场战斗正处于反馈较强的阶段。如果此时重新回到较轻的起手动作,连段的气势会突然减弱。直接进入 4A,可以继续保持较高的攻击强度。
4A 之后只能继续进入第五段终结攻击。玩家可以获得一段有力的地面收尾,但不能在地面与空中之间无限循环。
我所说的“丰富招式”,不只是角色拥有很多攻击动画。
有位移、范围较大的动作适合接近和起手;
有的动作负责维持普通连击;
有的动作负责把敌人打至浮空;
有的动作让玩家跟上空中的敌人;
有的动作负责将敌人砸回地面;
有的动作让玩家快速从空中返回地面继续追击;
终结攻击则负责结束整套连段。
Kiana 的地面第一段攻击带有较明显的接近能力,负责让玩家从合适距离开始进攻。
地面连段在第三段开始出现 A、B 两条分支:
A 分支容易触发,负责稳定完成基础连击。
B 分支需要玩家控制输入节奏,但后续招式伤害更高,并能够提供浮空等特殊功能。
这两条路线并不是为了让玩家记住更多指令,而是为了让相同的攻击键,根据玩家的操作节奏产生不同结果。
第五段攻击则是一招高伤害、长硬直的终结技。它负责为地面连段提供明确结束点,而不是让玩家无限循环。
因此,镜头需要跟随在玩家身后,让玩家角色始终处于画面主体位置。
但镜头不能死死贴在角色正后方。
如果玩家角色挡住敌人,玩家就只能看到自己在攻击,却无法看清敌人有没有被命中、飞向了哪里,以及接下来还能不能继续追击。
地空战斗还带来了另一个问题:当敌人被击飞、玩家仍在地面时,镜头应该跟随谁的高度?
我的处理方式很简单:
镜头高度始终选择玩家 PosY 和 TargetGroup PosY 中较高的一方。
敌人刚刚被击飞时,镜头会照顾敌人的高度,不让它迅速飞出画面。玩家随后进入空中,镜头又能自然接上玩家的追击。
整个过程尽量维持接近平视的观察角度,让玩家能够同时看清双方姿态和相对距离。
Rider Kick 快速回地时,镜头会跟随玩家迅速向下拉动,同时继续注视战斗目标。
这个动作首先保证了玩家回到地面后仍然能看见敌人,也自然强化了从高处快速落地的速度感。
这套高度选择逻辑,是我反复观察《鬼泣》的地空战斗镜头后总结出来的规律。它并不复杂,但对地空追击的稳定观感非常重要。
它拥有霸体,玩家不能在任何时候直接使用普通攻击压制它。但是,它的霸体并不会一直存在。攻击结束后的收招阶段会留下明显空隙。
玩家需要先躲过攻击,再抓住霸体消失的时机开始自己的连段。
突进的作用并不是让玩家一直远离敌人,而是把双方重新带回近距离。玩家躲过突进后,可以利用它的收招后摇开始进攻。
后撤则用于打断过于固定的近身节奏,让玩家重新接近和寻找机会。
观察攻击 → 躲开 → 抓住收招破绽 → 完成一整套追击。
它不是一个复杂 Boss,而是一个会反抗、会提供破绽
最重要的是引导玩家完整展示连段的小型精英敌人。
在打击反馈上,我没有把重点放在大量 HitStop、震屏和特效上。
对于这类地空追击 ACT,我认为最重要的反馈,是敌人如何被攻击真正改变。
轻、中、重三种地面受击;
浮空;
空中受击;
下砸;
落地后的短暂弹起。
玩家能够直接看出这一击是在维持连击、把敌人打至浮空,还是将敌人砸回地面。
浮空受击拥有完整的运动过渡,下砸落地后也会出现明确的弹起反应。这些变化既提供打击反馈,也向玩家说明当前连段处于什么阶段。
HitStop、音效和特效仍然存在,并会按照招式强度进行区分。但它们更多是辅助。
如果每一次攻击都使用很长的 HitStop 和强烈特效,连续攻击的节奏会不断被打断。强顿挫使用过多,也容易让反馈显得廉价和疲劳。
因此,普通攻击更强调连续性,重攻击和终结攻击再使用更明显的停顿与声音。
为了让这些机制真正运行,我同时搭建了项目的动作框架与角色运动管线。
动作系统需要处理玩家输入、AI 请求、受击事件、动作分支、取消窗口和优先级。
运动系统则基于 Kinematic Character Controller,统一处理普通移动、动作位移、冲量、重力和 Root Motion 的速度合成。
Timeline 负责组织一招动作中的动画、位移、攻击判定和吸附等时间内容。
这些内容并不是 CombatSample 最终要展示的战斗体验,但它们保证了我能够继续增加招式、调整轨迹、修改取消关系,而不需要每次重新破坏角色底层。
我希望自己对技术有足够理解,可以独立把设计做出来;但技术本身不应该成为项目唯一的目标。
完成这次 Release 后,我认为自己最大的变化,是逐渐改变了制作项目的顺序。
看到其他游戏的功能
→ 尝试完整复刻
→ 为功能搭建框架
确定想要的游戏体验
→ 设计能够传达体验的机制
→ 根据自己的目标进行取舍
→ 最后选择合适的逻辑与技术实现
我不再认为,只要把《鬼泣》中的功能完整复现出来,就会自然得到一场好的战斗。
参考游戏仍然重要,但参考的目的不应该是照搬,而是观察它如何解决问题,再判断这个方案是否适合自己的项目。
CombatSample 目前仍然只是第一个 Release。它的招式、敌人和战斗内容都还有继续扩展的空间,之后我也计划发布可玩版本,收集更多实际反馈。
输入简单,但招式丰富;
把敌人打上天,追上去,再砸回地面继续打。
后续文章会分别深入 CombatSample 中几个重要部分:
Control:怎样用简单输入支持丰富招式;
Camera:怎样让地空追击始终清楚、稳定;
Kiana 能力设计:每一招为什么存在,又承担什么战斗功能;
战斗反馈:为什么敌人的位移与受击反应比堆叠特效更重要;
Jaeger 与 AI:怎样提供破绽、反击和基础战斗节奏;
KCC 运动管线:地面、浮空、追击和回地动作如何稳定运行。
动作候选仲裁、ActionAsset、输入缓冲和其他框架结构,也会作为偏技术的支线文章继续补充。
我希望通过这个系列展示的,不只是我写出了哪些系统。
我能够先确定自己想要怎样的战斗,再把它拆成角色、敌人、镜头、反馈和底层机制,并亲自把这些设计做成一个可以运行的 Demo。
评论区
共 1 条评论热门最新