团结引擎 1.10 版本中,动画系统进一步增强角色运动与动画混合能力,新增Offset Root Bone、同步组(Sync Group)与 Dead Blending(外推混合)等功能。
这些能力分别面向角色运动中的根骨控制、不同动画间的节奏同步,以及动画切换时的姿态过渡,可用于角色移动、转向、状态切换等常见动画场景,进一步提升动画衔接的自然度与可控性。
新增 offset root bone 功能
在角色动画中,角色组件的逻辑位置与动画表现有时并不需要完全同步。例如角色急停、转向或受到外部控制时,希望角色逻辑位置保持稳定,同时允许可见角色模型产生一定程度的滞后、锁定或平滑回收。
新增的Offset Root Bone 节点,可以在角色组件位置与可见动画根骨之间维护一个独立的模拟偏移。
节点接收每帧的平移与旋转 Delta,并提供Accumulate、Interpolate、Lock 和 Release等模式,用于控制根骨偏移的积累、保持和回收。
同时可以通过Half-Life、速度限制和最大误差等参数控制偏移恢复速度及范围,在不改变角色逻辑位置的情况下,实现:
根骨运动滞后
根骨临时锁定
动画位置平滑追赶角色组件
根骨偏移的自然释放与归位
该功能适用于角色转向、急停、运动匹配等需要进一步协调角色逻辑位置与动画表现的场景。
新增同步组功能
不同动画进行混合时,传统线性混合会将被混合的动画从时间为 0 的阶段与当前动画进行混合,如果两段动画当前所处的运动相位不同,即使混合权重变化平滑,也可能出现脚步错位或姿态僵硬的问题。例如,从一种行走动画切换到另一种行走动画时,如果一段动画当前是左脚着地,而另一段动画是右脚着地,直接进行权重混合可能产生不自然的中间姿态。
新增的同步组(Sync Group)可以在动画混合前对动画的播放相位进行同步,使参与混合的动画从对应的运动阶段开始过渡,从而减少因动画相位不一致造成的僵硬过渡。
同步组目前支持:
AnimClipPlayable
AnimClipEvaluator
State Machine
如果参与混合的动画整体移动相位相同,仅播放速度不同,例如多段行走动画时间比例在 0.5 时均处于相同的脚步阶段,只需要在 AnimGraph 中为对应节点打开同步组功能,并设置相同的Sync Group Tag,系统即可自动完成同步。
对于运动相位不同的动画,则需要通过Sync Marker Config生成同步组配置文件进行进一步标记同步配置信息。
![]()
在配置文件中,可以分别为动画指定 Marker 的实际时间 Times、相位时间 Phase 以及姿态标记 Index。例如,可以约定 Index 0 表示左脚着地,Index 1 表示右脚着地,使不同动画能够按照对应的运动事件进行对齐。而实际时间和相位时间则一一对应,分别代表了动画实际播放的时间以及当前时间在动画整体中的比例,任意修改一个会联动将另一个参数调整到同一个对应的位置。
![]()
完成配置后,即可将 Sync Marker Config 指定给 AnimGraph,并在动画混合时自动完成相位同步(注:只有 AnimGraph 中存在至少一个节点打开了同步组,Inspector 上才会出现 Config 的 slot)。
![]()
新增 Dead Blending 外推混合功能
在动画切换时捕获源姿态与速度,使用隐式指数衰减(Implicit Exponential Decay)对每个骨骼通道进行速度感知的外推,并通过交叉混合(Cross-fade)平滑过渡到目标姿态,适用于状态机过渡、AnimationClip 切换等场景。与 Inertialization 使用多项式衰减不同,Dead Blending 使用基于速度的指数衰减外推,能更自然地延续源动画的运动趋势,尤其适合角色移动方向变化或速度渐变等场景,一定程度上可以减少 Inertialization 混合中不自然的混合姿势。
![]()
先看一个具体场景:角色从「待机(Idle)」切换到「向前跑步」。
过渡方式
行为
无过渡
直接从待机姿态切换到跑步姿态,容易产生明显跳变
CrossBlend(交叉混合)
同时播放待机动画和跑步动画,通过权重进行插值
Inertialization(惯性化)
停止播放待机动画,在目标姿态上叠加逐渐衰减的姿态偏移
Dead Blending(外推混合)
停止播放待机动画,根据源动画速度外推运动趋势,再与目标姿态进行混合
Dead Blending的核心区别在于,它会保留源动画在切换瞬间的运动方向和速度趋势。
在一些运动幅度较大的动画中,例如跑步、转向或快速肢体运动,Inertialization 的姿态偏移可能在目标动画继续运动后产生较大的关节偏差,导致关节超伸。Dead Blending 则通过“外推姿态 + 目标姿态”的方式进行混合,使动画更自然地从原有运动趋势过渡到新的运动状态。
基于运动趋势的外推混合
Dead Blending 会在动画切换发生时捕获源动画的当前姿态与运动速度,并使用隐式指数衰减继续外推原有运动趋势,再逐步与目标动画进行混合。
与单纯根据姿态差异进行过渡不同,Dead Blending 会考虑各骨骼通道在切换瞬间的运动速度,并根据运动状态自动调整衰减速度:运动较快的骨骼更快收敛,运动较慢的骨骼则保留更长的运动趋势,从而减少快速转向、急停等场景下突然失去运动惯性造成的不自然姿态。
![]()
同时,Dead Blending 提供速度上限钳制,避免异常速度导致过度外推,并支持通过AvatarWeightMask为不同身体部位设置不同的混合持续时间,例如让腿部更快进入新的移动状态,同时让上半身保留更长的运动惯性。
与 Inertialization 的区别
Inertialization 主要通过衰减源姿态与目标姿态之间的差异完成过渡,而 Dead Blending 会进一步利用源动画的运动速度进行外推,使角色在切换动画后仍能短暂延续原有运动方向,再逐渐由目标动画接管。
因此,在跑步转向、急停、待机切换至快速运动等运动趋势变化明显的场景中,Dead Blending 能够进一步改善动画切换时的运动连续性;而对于频繁、快速且不强调源运动趋势延续的动画切换,仍可以使用 Inertialization。
使用 Dead Blending
Dead Blending 节点通过外部请求触发,有两种触发路径:
方式一:状态机过渡
在 StateMachine 的 Transition Inspector 中将Blend Mode设置为 DeadBlending,并在状态机输出前连接 Dead Blending 节点。过渡时长即为外推混合时长。
![]()
方式二:FunctionNode 调用 ClipPlayable 接口
通过 AnimationClipPlayable.SetAnimationClipWithDeadBlending(clip, blendDuration) 在运行时触发剪辑切换,配合 Dead Blending 节点完成外推混合。
大多数参数保持默认值即可。通常需要关注的是Half Life Base(控制整体衰减速度)和Duration Scale(缩放混合时长)。
Unity 官方微信
第一时间了解 Unity 引擎动向,学习进阶开发技能
每一个“点赞”、“在看”,都是我们前进的动力
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.