Sequence播放Root Motion动画有些问题

Hi,

我们遇到一个问题,就是Sequence播放Root Motion动画表现特别奇怪,随便弄的一个actor K rootmotion动画,它都会跑到0,0,0点。一直没找到到原因,目前就完全没法正常播放rootmotion。

然后我们尝试添加了一个Transform轨道,加了以后,它不会飞回到0,0,0,点。但是发现动画播放完毕以后会弹回去,我们希望播放完就停在那,不要回弹回去。

如果把Transform轨道删了,动画一播放就会飞到0,0,0点,但是动画不会回弹回去。这个行为就有点让我们困惑了。

我们使用外部素材录了一段视频:https://drive.google.com/file/d/1lvZAmEqCBDvQSsIfV2TUIDOy3eyhHLdB/view?usp=sharing

我们想的最终的工作模式是删掉Transform,然后让sequencer从actor当前位置开始。

但是现在删掉Transform轨道就会飞到0,0,0点,但是这个时候就不会弹回去了。主要其他也就无所谓了,没有Transform轨道就不会弹,但是会飞到0,0,0。这个就很难受了。为什么不是从sequence启动时候actor的位置开始,而是0,0,0呢。

我们想了解下这个有什么解决方案么?现在整个工作流程因为这个问题就卡主了。

附件中,我们提供了可以复现的工程。

我试了下,觉得这个正常行为吧。Swap root bone Actor是把Root bone的Transform应用到Actor上,root不动。Root的动画数据应该是Local Space值,应用到Actor上表现就基于0.0.0播放了,而且你的Actor和角色面向的朝向是有90度差别的,旋转也是错误的。

加一条Transform Track里面的参数是当前世界Transform,就相当于把当前Transform作为Local的坐标原点了

加了Transform Track播放完动画,Actor弹回原点是因为Root的动画信息没了,只有Transform Track的原点信息,就弹回原点了。把动画Track设置播放完毕后Keep State,这样完毕后始终会对Actor应用一个root最后一帧的Transform,角色就保持位置不弹回了。

普通的对象在Sequencer里即使没有Transform Track也会保持在原地是因为Transform没人去动他;但Swap root bone Actor每帧都会用Root的信息把Actor的Transform冲掉。除非Root动画数据世界坐标系,否则添加一条Tranform Track就是把local转到world的方法

Hi,

把动画Track设置播放完毕后Keep State,这样完毕后始终会对Actor应用一个root最后一帧的Transform,角色就保持位置不弹回了。

我们在提供的测试Demo里面测试了修改为Keep State依旧会回弹。是还有哪里设置有问题么?

我在论坛中也找到有人讨论类似的问题:

https://forums.unrealengine.com/t/root-motion-in-sequencer/614876/7

[Image Removed]设置完Keep State点击Sequence的Play,播放完毕后还是回弹了。但是拖放Timeline没有回弹。不知道是哪里还存在问题么。附件中录了一个视频。

的确!我估计是个bug,先反馈给相关同事了。后续有信息我会更新到这里

:sweat_smile: 好的,麻烦了。这个出问题导致流程都卡主了。有什么解决方案麻烦告知一下,谢谢。

根据同事的反馈这是一个已知问题或功能上的缺失。已经记录并计划在5.7在Sequener Anim Mixer插件中完善这个功能;对于是否会在非插件情况下添加或修复这个问题大概率可能是否定的。今后大概率Sequencer中骨骼动画的混合会走以上插件,提供更加完善可靠的功能。

5.6中其实已经加入了Sequencer Anim Mixer的实验性版本,也解决了rootmotion之前有些重复计算Transfrom的问题,但对RootMotion的KeepState也还没有支持。

目前可能需要自己来实现更新其播放完毕后的位置和姿态,这些应该是可以通过SQ的Event Track里实现的,只是相对麻烦一些。另外放完pause,延长尾帧等不让SQ播放完毕,Matching bone到另一段固定姿态等方式避免重置,根据实际应用情况看是否适用。

明白了,我们关注下Sequener Anim Mixer的进展吧。