如何将带有位移的Unity Humanoid动画转换为原地播放动画


mixamo上找到的动画,除非特别说明为in-place播放,否则大多数动画都会包含位移。但有时,我们可能只希望动画在原地播放。那么,我们应该如何实现这一需求呢?

为什么会有位移,以及位移在哪里?(仅适用于Humanoid)

动画中的位移通常取决于RootNode,即根骨骼节点。为什么会这样呢?

想象一下,你在使用手机或电脑阅读本文。你会发现,你滑动屏幕或在键盘上输入文字,所有这些动作都可以通过不同的旋转来表示。例如,先移动肩膀,再弯曲手肘,然后转动手腕,最后控制手指在键盘上敲击。而如果你要走动,那么你的位置就发生了改变,你进行了世界坐标的位移。在游戏中的人形骨骼动画就基于这种“直观的现象”,采取了根骨骼位移+旋转,其他骨骼只进行旋转的方法

我们可以直接将一个Mixamo下载的带有位移的动画文件导入到场景中,并播放。
在这里插入图片描述
然而,我们会发现,位移实际上是应用在根物体上的,而不是真正的Hips节点上。这是为什么呢?

在这里插入图片描述
在Unity的动画系统中,当使用Humanoid类型的Avatar时,动画数据通常会被应用到带有Animator组件的根物体(通常也是模型的根物体)以及Humanoid Avatar定义的Hips(即Hip或Pelvis)骨骼节点上。这种设置的主要原因有以下几点:

  1. 根物体的位置变化通常用于表示角色在游戏世界中的全局移动,例如走路、跑步或跳跃等。通过在根物体上应用平移动画,角色可以在场景中进行移动。
  2. Hip或Pelvis节点的平移和旋转变化通常用于表示角色的姿态变化,例如站立、蹲下或跳跃等。这些动作主要是通过改变角色躯干(包括Hip或Pelvis节点及其子节点)的相对位置和方向来实现的。
  3. 在Unity的动画系统中,根物体和Hip节点都可以有自己的动画曲线(Animation Curve),这样可以分别控制角色的全局移动和姿态变化。这是一个强大的功能,因为它允许动画师对角色的行为进行细致的控制。

如何修改成原地播放

既然我们知道了位移是应用在根节点上的,那我们只需要删除根节点的位移就可以了。

例如,以这个后空翻动画为例。
在这里插入图片描述
打开这个动画文件(已经将Rig配置为Humanoid了),我们会发现有一个名为Root T的属性。它是Root Bone Translation的简写。我们将Root T.x 和Root T.z 删除掉。

再次在Preview Panel中播放动画,你会发现动画已经在原地播放了。因为这个Root T实际上是根骨骼的位置,删除了x和z的动画曲线,也就是删除了x和z的变化,从视觉上看,它就在原地了。但为什么不删除Root T.y呢?因为它控制的是Root骨骼的高度,如果Root骨骼高度从0.9变为0,它就会下降。

在此之后,我们再次播放动画,会发现它已经在原地播放了,但是场景可能会有些抖动。这是因为预览中的焦点对准了Avatar的dummyRootNode(可以理解为一个假的空节点)。我们在Y轴上保留了动画曲线,所以这个假节点在Y轴上应用了动画,产生了实际位移。那么如何解决这个问题呢?
在这里插入图片描述
选择你的Animation Clip,将Root Transform Position (Y)中的Bake Into Pose选项勾选上就可以了。

“Root Transform Position Y” 是一个设置项,它决定了动画中的垂直移动(Y轴移动)是否会影响到模型的根节点(root transform)。

如果你将 “Root Transform Position Y” 设置为 “Bake Into Pose”,那么动画中的垂直移动将会被包含在动画姿势中,也就是说播放动画时,角色模型并不会在场景中实际上下移动。

相反,如果你设置为 “Based Upon Original” 或 “Based Upon Start”,那么动画中的垂直移动将会应用到模型的根节点上,这意味着当播放这个动画时,角色模型会在场景中实际上下移动。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值