混合程序动画
Part01 头部朝向目标点
1.控制点测试效果


关于aim节点:
- Primary (Aim)
- Axis : 指向目标的轴,头部朝向一般是向前
- Target :目标位置
- Secondary (Up)
- Axis : 用来定义"向上"的轴,确保骨骼在旋转时不会发生翻转。
- Target :向上的方向
2.在Level中头部朝向目标

角色蓝图
tick:

ControlRig
LookAtTarget要设置为public

从世界坐标转换为Rig坐标

动画蓝图
Initial:得到角色蓝图实例

update:从蓝图传递参数

传入参数到ControlRig

效果:

3.利用Level Sequence创建Left-Right look动画
录制教程:

4.加入到动画蓝图
对动画序列的Additive设置如下:局部空间 以中间帧15帧为基准

ControlRig中设置LeftRightLookBlend曲线值映射:-90,90->-0.5,0.5
因为曲线的默认值是0,为了不让默认时刻身体朝向正中间,曲线必须映射为-0.5,0.5



Spring Interpolate是 Control Rig 中一个**基于物理弹簧模拟的平滑插值节点,离目标越远,逼近速度越快;越近则越慢**
- Strength:弹簧的刚度决定了它向目标方向的拉力大小。该数值表示在无阻尼条件下弹簧的振荡频率。
- CriticalDamping:弹簧的阻尼系数
- = 1.0 → 临界阻尼:最快回到目标且无振荡(推荐默认)
- < 1.0 → 欠阻尼:会产生来回振荡(弹性晃动效果)
- > 1.0 → 过阻尼:更慢但更稳定地逼近
动画蓝图添加叠加层Additive,叠加层动画播放进度用LeftRightLookBlend曲线控制,由于前面曲线映射为-0.5,0.5,因此这里需要加上0.5再传入ExplicitTime

效果:

5.限制头部旋转量在90度以内
头部旋转量 = aim后的Rotation - 头部初始Rotation
注:四元数Quat不能相减,四元数A和B的旋转差 实际上是 A 乘 B 的"逆"
------如果想要四元数的旋转差用"-"来运算,可以考虑重载运算符

Part02 与其他动作混合(抓取、攻击、环境交互)
创建动画

fk和ik的切换
勾上即切换到ik
目标位置偏移


原理:实际抓取的位置 - 动画资产中抓取的位置 = 产生的偏移量
目标位置= 偏移量 × HandGrab曲线值 + 手部自身的位置
控制点


蒙太奇的动画曲线HandGrab

效果:

抓取场景中实际的物体位置

把原来测试用的控制点换成实际要抓取物体位置


效果:

一些潜在问题以及应用场景
1.目标位置距离角色太远
有时候,当目标位置距离角色太远时,角色的身体可能会为了够到目标而发生轻微扭曲或倾斜,看起来会有些不自然,甚至显得有点傻。因此可以通过一些方式解决这个问题。
例如,可以设定一个目标距离范围:如果目标离玩家过远,可以在 Control Rig 中移动角色的骨盆,让身体向前倾,或者仅将身体向前移动,同时保持双脚留在原地。也可以通过第三人称角色蓝图直接让角色走进范围后再拾取。
不过,更合理的方案通常是只允许角色抓取处于可及范围内的物体,而不是让角色尝试抓取明显过远、不适合抓取的目标。角色不应该被允许去够那些距离过远的物体。
最简单的实现方法是在第三人称角色中,在角色前方设置一个碰撞盒(Box Collision)或碰撞球(Sphere Collision),用于检测哪些物体处于角色的抓取范围内。当玩家尝试抓取时,例如按下鼠标左键,可以获取这个碰撞体内所有重叠的 Actor,并检查这些对象是否带有"可拾取(Pickable)"之类的标签,或者是否属于角色能够拾取的对象类型。
除了重叠检测外,还应当进行距离检查。可以检测目标与角色、角色头部,或者角色手臂之间的距离,确认目标确实位于合理的抓取范围内。因为即使某个物体与碰撞体发生了重叠,它也不一定真的处于你期望的可抓取位置。
此外,还可以进行一次射线检测(Line Trace),确认角色能够"看到"想要拾取的物体。理论上,一个物体可能位于角色的可抓取范围内,也可能与碰撞体重叠,但它可能在一面墙的后面。此时角色实际上无法直接接触该物体,因此需要确保角色与目标之间没有墙体或其他障碍物阻挡。
这些都是可以在蓝图中完成的基础判断逻辑。通过距离、碰撞重叠和视线检测,可以避免角色对不合理的位置执行抓取动画。
这类动画本质上是一种动态调整动画。它可以用于拾取物体,也可以用于让角色朝某个目标出拳。无论是抓取还是攻击,基本都可以使用相同的逻辑。

