我游戏的战斗系统一开始是有考虑到非人形角色的,但是当时想着先把人形搞定,其他的后面再说,现在相当于是在填以前留下的坑。
·首先给大家展示下目前游戏的战斗,游戏采用45度俯视角跟随主角,敌人会在主角周围徘徊移动,伺机寻找机会上前攻击
·需要注意的是,敌人在移动时,有的时候会采取踱步策略,以一种境界地姿态移动,业内说法叫8-direct move,翻译过来就是8方向移动,保持主视角始终锁定一个方向。
然后,角色在战斗时候的表现是这样的:
·可以看到,我的游戏里角色在战斗时会有类似步进,击飞,腾空,空中打击等表现,这也是几乎所有动作游戏都有的一套流程。
那么现在问题来了,对于人形角色,这一套系统表现得很完美,而且由于引擎自身的功能,包括动画对于人形的支持也很强大,但是对于一些动物例如老虎或者多足动物而言,大多数情况下并没有那么多的动画文件,这就导致了同样的动画控制器,对于人形来说没问题,但是动物的话,很多关键动画都是缺失的。
·图一显示的是游戏中动画控制器的设计结构,图二显示的是一个标准8方向移动控制的配置,可以看到对于移动动画来说,这里配置了前进-后退-左前-右前-左-右-后-左后-右后8个方向的动画,并且还配置了8个方向的行走动画,通过hori和speed参数在游戏进行时自动融合调节,这也是目前最简单最基础的移动动画的方案。可以看到,人形动画有大量的动画文件支持,但是对于动物的动画,大多数时候只有很少的动画支持。当然,如果有专业动画师,那这个问题也能轻松解决,但是招一个专业动画师或者动画外包动得花好几个w,对于一个小团队或者个人开发者来说,性价比实在不算高。
·例如我这里使用的大猫咪模型,仅提供两个攻击动画,死亡、受击、站立、奔跑、走路这几个动画,其中最关键的奔跑和走路都是向前动画。这些对于一些游戏来说肯定是足够的了(例如回合制游戏或者战棋、塔防游戏),但是对于动作游戏来说,至少在移动的表现上会比较粗糙,实际的效果会变成下图所示:
·上面两张图中,图一显示了在允许大猫咪踱步的情况下,没有踱步动画的时候,会导致大猫咪在平行移动时产生漂移。而图二则是禁止踱步,这样会导致大猫咪一直在奔跑。这两种情况都需要在原有行动框架中加一些什么if之类的判定,要说能用的话其实也就将就用了,对于个人独立开发者来说,由于资金和技术力的限制,很多地方都需要妥协,例如这里,我本来打算没有其他解决方案的情况下,让它跑一段路停下来朝向玩家,等待一段时间再奔跑,通过行为树来遮盖这些瑕疵,但是这又避免不了在代码中加一堆行为树判断,而且对于一个追求品质的游戏玩家来说,这种细节的缺失显然是败笔,换句话来说,这老虎看起来很死板,不灵动。
·好在这个问题没有困扰我多久,最终还是叔叔拯救了我,晚上在刷某站小姐姐跳舞视频的时候,大数据算法给我推了个视频,正好看到有现成的解决方案,立马连小姐姐都不看了爬起来开整,最终成品如下所示:
·可以看到,大猫咪在快速移动之后,有时会以警戒姿势缓慢地移动,四肢的移动在各个方向上都比较合理,这一点其实已经比大多数做8方向动物动画的解决方案要优秀了(除了一些非常精通的动画师),而且,细心点的玩家还会发现,大猫咪在移动过程中,视线会一直紧紧盯着玩家。
·接下就是插件的具体用法,首先这里面我总共用到了两个插件,look Animator 和legs Animator,这两个插件在引擎商店都可以搜到,作者是FImpossible,单个插件价格大概在300+软妹币左右,总共应该要花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也有许多可以调节的详细,包括调整行动速率、角度、阈值、行动限制等等,这里也不做赘述。
·把这两个结合一下,一只活灵活现的大猫咪就出现啦。
·最后,再测试一下多只大猫咪的表现,感觉也很不错。
·这次的日志分享就到这里啦,喜欢的老爷们记得点个关注和收藏。最后再打个广告,我现在一个人失业在老家小县城做独立游戏,目前做的这款叫《火柴人车翻魔幻世界》,预计在今年年底上线测试版,感兴趣的老爷们可以加个愿望单,十分感谢大佬们的支持!
目测插件里面应该是应用了大量的IK反算。有空最好熟悉一下IK不然挺花钱的。
最近由 Rushot 修改于:2023-09-14 13:04:58不过他这个四脚踱步顺接角色旋转的思路倒是可以学习起来。