前期提要
如同上一篇文章介绍的设置,角色能正常实现待机——向前起步——行走循环——结束行走——待机多个动画播放跟切换。(下图为启用RewindDebugger的截图,红色点及路径为历史位置及轨迹,蓝色点为预测的位置点与路径)
当我们旋转镜头时,角色也会按照当前的前向行走,由于转向速度够快,我们就感觉角色在沿着圆弧运动,而预测的路径也会呈圆弧状。
但当我们尝试向后或左右方向移动时,那就穿帮了。角色会突然转向前向方向,然后开始播放起步动画。
要解决这个问题,那就要先搞懂两个东西,第一个是:旋转模式。
旋转模式
UE里的旋转模式分两种,Strafe与Orient to movement。用法环来解释就是,褪色者锁定视角到敌人,褪色者的前向是面向敌人的方向,就是Strafe;褪色者正常行走时,角色的前方是接受到的输入的方向(就算在输入前角色的前方是正前方,输入向后的动作指令,角色转向后方),就是Orient to movement(由于Orient to movement这一串太长了,后面将简称为Orient)。由于我使用的是虚幻默认的第三人称游戏模板,其默认设置Orient to movement为真,当角色正前方向与输入方向不一致时,角色会旋转至输入方向。
若将Orient的选项取消,在进行运动测试,会发现角色会以向前起步行走的姿势进行输入方向的移动。
这个就很明显了,因为取消了Orient之后(即Strafe状态下),角色不会转向移动方向,自然就保持当前朝向进行移动了。
现在思考一下,如果需要角色在Strafe状态下(即取消Orient to Movement),向四方移动时能像开头描述那样能正常播放切换不同动画,需要怎么操作?嗨!直接在PSD里加动画资产就好啦,反正不同动画的过渡条件例如未来速度Future Velocity、Speed2D等参数的设置都类似,应该不会出错的!此乃第二个坑。
以向左移动为例,分别向之前的Start、Jog、Stop的PSD中加入左向起步、行走循环、停止的动画资产,然后播放场景测试一下。
在向左移动时,能正常播放向左行走的动画,但是在向前移动时,意外地还是播放向左起步的动画。
多次播放场景测试,尽管有些时候能正确依照移动方向播放相应的动画,但仍然会出现搭错线的情况。这时候就引出了之前说的第二个问题:根骨骼运动。
根骨骼运动
在UE里,如果一个角色在播放一个末尾位置与起始位置距离很大的不含(或不启用)根骨骼运动的动画,那在动画播放结束时,会看到角色,或者说这个角色的模型,会从末尾位置被拖拽回到起始位置(如下图演示,图片来源于虚幻官方文档)
若该动画包含(并启用)根骨骼运动,则如下图所示
可以注意到角色播放动画结束时,是以胶囊形状的线框(胶囊体)为位置基准,启用了根骨骼运动之后,胶囊体会跟随骨骼体的运动,而常说的角色位置,一般就是说的胶囊体的位置,也就是说,当角色启用了根骨骼运动后,角色会跟随带有根骨骼运动数据的动画移动。(开始拗口起来了)在动画资产中需要点选以下选项才能启用根骨骼运动。
但是在PSD中,明明看到根骨骼运动启用了呀!(选中的动画栏中,白色的拖尾箭头表示启用了根骨骼运动)
是的没错!确实已经启用了!所以问题就是,这些向左起步、行走循环、停止的动画,都不包含根骨骼运动数据。以下使用Lyra的动画资产进行对比。
骨骼树中选中根骨骼Root,拖动时间轴游标,注意右边的Mesh Relative的Location数据差异。
可以看到角色骨骼体在视口位置的差异以及右边的Mesh Relative的Location数据差异。这是包含根骨骼运动的动画资产。再看原本机器人的动画资产(机器人原本材质颜色是绿色的,在上述案例中只是给替换了材质,并无其他设置)。
可以看到机器人的行走动画并不会真实向前移动,也就是不包含根骨骼动画数据。
那这个根骨骼动画,跟MM系统正确选择动画资产播放,有咩关系?
关于匹配
回过来看看官方对于MM系统的介绍
官方介绍说“从数据库中选择动画姿势,在运行时匹配动态系统查询”。“匹配”,也就是使用数据库里的动画姿势,与某个给定的参考值进行差异对比,得出差异最小的动画姿势就是即将播放的动画。
在MM系统运行中,角色运动时位于角色前面的轨迹是MM系统基于该角色的运动组件中参数配合运动输入进行预测的。在机器人的案例中,机器人角色往正前方移动,其预测的轨迹点位于角色正前方,但却选择了向左行走的动画,说明了是“MM系统对预测的轨迹点匹配了错误的动画资产”,将本该向左的动画姿势匹配到了向前的运动中。对于预测的轨迹与动画的匹配,其中重要的因素之一就是根骨骼运动,说白了就是在MM系统中,预测的轨迹与根骨骼的变换趋势是重要的匹配因素之一。
关于匹配的问题展开说的话要涉及到PSS跟PSD的配置,那这里就直接演示根骨骼的与预测轨迹的匹配吧。新建两个PSD(因为仅用于测试,所以直接使用默认设置就好,所需要的PSS也可以临时创建一个套用),一个用于存放机器人的行走动画,一个用于存放Lyra项目的行走动画。
这是存放机器人行走动画的PSD,由于其动画资产不带根骨骼运动数据,所以是否启用根骨骼运动并不影响结果,在预览窗口中看到四个动画都挤在原点。
这是存放Lyra项目行走动画的PSD,其动画资产带根骨骼运动数据,因此在预览窗口中能看到四个动画能分别向四个方向走开,而不是挤在原点。(窗口中的颜色点、线等可以忽略,那是在PSS中进行设置的,不影响预览结果)。
当角色向前移动时,其预测轨迹向前,此时运行MM系统,对数据库中的动画逐个查询,以其根骨骼的变换趋势进行对比,若查询到某个动画的根骨骼也向前移动,并且其他特征差异也最小,那该动画即将于当前动画进行过渡直至播放该动画。
太多字了请看
返回来,我们应该怎么去解决这个问题呢?答案是,在对这些动画资产补充根骨骼运动数据前,无法按照官方MM案例的设置实现这个效果(摊手)。
所以搞了这么久,只有一个实现不了效果的结论。就当是提前认识MM系统的资产准备了,磨刀不误砍柴工嘛。下篇文章开始将使用Lyra资产重头构建一个能用的MM系统,又是敲键盘的一天咯。