动画插件功能演示:如何在游戏中添加一只活灵活现的大猫

作者:老高
2023-09-20
4 1 0

在游戏中添加一只类似老虎的四足怪物并不困难,但要把它变得活灵活现,能提升游戏观感却不是件容易的事,尤其是在设计之初并没有考虑四足动物战斗的情况下。还好,在一天晚上刷视频正巧看到一个强大的动画插件,解决了我的大部分痛点,为游戏加入各种各样的动物以及多足怪物都有了可行方向。

写这篇日志的时候,正巧 Unity 发布了新的收费规则,这对开发者不是件好事,更会影响 Unity 的开发生态。但回头一想,咱游戏能不能卖到 20W 刀,有没有 20W 下载还不好说,暂时也不用操那么多心了。

我正在开发的游戏,战斗系统一开始有考虑到非人形角色,但早期想着先实现人形相关设计,其余后面再说,所以现在相当于在填以前留下的坑。

首先,给大家展示下目前游戏的战斗:采用 45 度俯视角,镜头跟随主角,敌人会在主角周围徘徊移动,伺机寻找机会上前攻击。

人形角色战斗

需要注意的是,敌人的移动,有时会采取踱步策略,以一种警戒的姿态移动,业内说法叫 8-direct move,翻译过来就是 8 方向移动,保持主视角始终锁定一个方向。

然后,角色战斗时的表现如下:人形角色战斗2

可以看到,会有类似步进、击飞、腾空、空中打击等动作,这也是几乎所有动作游戏都有的一套体系。

现在问题来了,对于人形角色,这套系统表现相当不错,而且由于引擎自身的功能,动画对人形的支持也很强大。但对于一些动物,比如老虎或其它多足动物而言,大多数情况下,引擎自身并没有那么多动画文件。这就导致,同样的动画控制器,对于人形动作表现没问题,但若换成动物,很多关键动画都是缺失的。

动画控制器结构

图 1

Ground动画树结构

图 2

图 1 显示的是游戏中动画控制器的设计结构,图 2 显示的是一个标准 8 方向移动控制的配置。可以看到,针对移动动画,这里配置了前进-后退-左前-右前-左-右-后-左后-右后,共 8 个方向的动画,并且还配置了 8 个方向的行走动画,通过 hori 和 speed 参数在游戏进行时自动调节。这也是目前最简单、最基础的移动动画方案。

实际使用会发现,人形动画通常有大量动画文件支持,而动物动画往往有所欠缺。当然,如果有专业动画师,此类问题便可轻松解决,但招一个专业动画师或者动画外包,动辄得花好几个 W,这对小团队或个人开发者来说,性价比实在不高。

Tiger动画文件

例如我这里使用的“大猫咪”模型,仅提供 2 个攻击动画,以及死亡、受击、站立、奔跑、走路动画,其中最关键的奔跑和走路都是向前动画。这在其它类型游戏中基本够用(例如回合制游戏、塔防游戏等),但对动作游戏而言,至少移动表现会比较粗糙,实际效果会变成下图这样:

大猫咪-踱步

图 3

大猫咪-禁止踱步

图 4

图 3 显示,在允许大猫咪踱步的情况下,若无踱步动画,会导致其在平行移动时产生漂移。图 4 则是禁止踱步,会导致大猫咪一直在奔跑。这两种情况,都需要在原有行动框架中加入诸如 if 判定之类的限制,其实也将就能用。尤其是个人独立开发者,由于资金和技术力的限制,很多地方都需要妥协。

例如这里,我本来打算让大猫咪跑一段路就停下来朝向玩家,等待一段时间再奔跑,通过行为树来遮盖这些瑕疵,但这又避免不了在代码中加一堆行为树判断。而且,对于追求品质的游戏玩家来说,这种细节缺失显然是败笔,换句话讲,这老虎看起来很死板,不灵动。

好在这个问题没有困扰我多久,最终还是叔叔拯救了我。某天晚上刷 B 站的时候,大数据算法给我推了个视频,正好看到现成的解决方案。当时立马爬起来开工,最终成品如下:

大猫咪试图亲吻火柴人

大猫咪在火柴人旁边快乐玩耍

不难看出,大猫咪在快速移动后,有时会以警戒姿态缓慢地移动,其四肢动作在各个方向上都相对合理。仅这一点,其实已经比大多数做 8 方向动物动画的解决方案优秀(除去一些非常精通于此的动画师的设计),而且,细心的玩家还会发现,移动过程中,大猫咪的视线会一直紧盯玩家。

-----------

接下就是插件的具体用法。首先,我在这里总共用到了两个插件,look Animator 和 legs Animator,作者是 FImpossible。它们都可以在引擎商店搜到,单个插件价格大概在 300+ RMB 左右,总共需要花费 500-600 元(单纯出于学习目的可以走淘宝,但若正式用于游戏开发,还是推荐大家多支持作者)。

先说 look Animator。此插件的用法很简单,直接挂到模型上即可,为了统一,这里推荐与动画控制器挂到一个节点上。挂载点

如果 Lead bone/Head 为空,点击旁边的 auto find 按钮,插件会自动寻找头部节点。之后,切换 Tweak 分页,把希望头部注视的目标拖进去就可以了,非常易用。

这一步完成后,大猫咪会一直盯着方块,同样,如果你不想让大猫咪持续盯着,将该栏位设置为空即可。实际运行时,需要通过代码对这个值进行调整,让大猫咪在某些状态下(如晕眩、死亡时)不会一直盯着目标,然后在恢复常规状态(如醒来)时继续盯着。此外,插件可以对旋转角度、速率、阈值等参数进行调节,还拥有其他强大的功能,这里不做赘述。感兴趣的朋友可以去看 look Animator 的官方说明文件,讲述得很详细。

接下来,就是另一个插件 legs Animator。安装好之后,用法跟 look Animator 一样,直接挂到模型上。

挂载完成后,需要拖一拖 Hips 和 Legs 的节点,以便插件识别骨骼——根据图示或者说明文件拖进去即可。注意,对动物来说,需要额外设置 Extra Hips Hubs,这里的节点就是额外腿部的根节点。例如图中,ThinL 和 ThinR 的父节点是图中的 pelvis,所以不用管;而 UpperLegL 和 UpperLegR 的父节点是 spine_03,这个节点在 pelvis-spine_01-spine_02 下面,并不是 pelvis,所以需要把 spine_03 填进去,让插件识别这也是一个节点。

设置完,试试运行,效果如图:

效果相当棒,完美解决了我所遇到的困难。虽然后来别人告诉我,这些东西在虚幻引擎里其实都有现成的......但至少解决了我目前项目的一些需求。

除此之外,跟 look Animator 一样,legs Animator 也有许多可以调节的参数,包括行动速率、角度、阈值、行动限制等等,这里也不做展开。

-----------

最后,把这两个插件效果结合一下,一只活灵活现的大猫咪就出现啦。又测试了一会儿多只大猫咪同场的表现,感觉也很不错。

多只大猫咪轮番与火柴人...

本次日志分享就到这里,最后再打个广告。我现在失业,在老家小县城一个人开发独立游戏,目前做的这款叫《火柴人车翻魔幻世界》,预计于今年年底发布测试版。感兴趣的朋友可以加个愿望单,感谢大家的支持!