【ue4】【使用】动画
动画
动画资源
Animation Sequence -- 动画序列
Animation Composite -- 拼接多个动画序列 -- 没什么卵用
Blend Space -- 混合空间 -- 可由参数控制动作在不同的维度融合,
Aim Offset -- 偏移目标 -- 常用于人物瞄准时的各个角度
Montage -- 动画蒙太奇 -- 支持动画的连接、分段、循环等等
其中蒙太奇动画可设置 Slot 以供在动画状态机里留下的 Slot Pose 调用, 但是其调用通常由 Montage 相关的 API 主动调用, 适用于释放主动技能等。
【Tips】 BlendSpace 和 AimOffset 和 Montage 都可有一至多个动画序列制作而成
动画重定向
类似于 u3d 中 Humanolid 的 Retargeting
使用相同骨骼资源的 Skeletal Mesh 可以设置 Retargeting 选项
Animation -- 骨骼的 Transform 信息来自动画文件
Skeleton -- 骨骼的 Transform 信息来自骨骼文件
Animation Scaled -- 骨骼的 Transform 信息来自动画文件, 但根据骨骼进行缩放
Animation Relative -- 不知道
【Tips】 一般将 Root、IK 和 Weapon 骨骼设置成 Animation 【Tips】 一般将 Pelvis骨骼 (或根节点) 设置成 Animation Scaled
对于使用不同骨骼资源的 Skeletal Mesh, 也可以使用 Rig 文件将两者进行映射
动画逻辑
动画的逻辑实现在 动画蓝图 (Animation Bluprint) 里
动画蓝图 (ABP) 有两种比较重要的图表 -- 事件图表和动画图表
事件图表将外部驱动动画运行的数值(如人物速度)或状态(如人物跳)传入动画蓝图里
而动画图表里则是由动画状态机驱动而获得不同的姿势 Pose
状态机
类似于 u3d 的 Animator Controller
动画事件
动画事件 (Animation Notify) 可以在 动画序列 或 Montage 中运行设置
也可在动画状态机状态跳转线上进行设置
动画事件可在事件图表中绑定触发时的事件
【Tips】有时候动画可能会被忽然打断,注意在此情况下在动画序列或 Montage 还未播的地方设置的 Notify 是不会被响应的
动画逻辑重用
Child Animation Blueprint
主要用于重用所有动画逻辑
仅能替换不同的动画文件
Sub Animation Blueprint
可分解动画逻辑到不同的蓝图中去
但是要注意的是
一个动画子蓝图只能在状态机中被引用一次, 即不能出现在两个地方
父动画蓝图获得不到子动画蓝图的实例, 不能直接调用子动画蓝图的函数和变量
似乎只有在动画图表中才可以将父动画蓝图中的数据赋值给子动画蓝图, 前提是子动画蓝图中暴露出了这个变量
所以如果想要分离比较复杂的逻辑, 如比说
想让父动画蓝图也能调用子动画蓝图的函数
那么就需要自己设计方案了, 此处有一种方案为
子动画蓝图可以获取到父动画蓝图的实例 (通过其所属AActor间接获得)
那么子动画蓝图就可以访问父动画蓝图的函数
在父动画蓝图里设置函数执行的标记位 (bool型), 通过动画状态机付给子动画蓝图
子动画蓝图在 Tick 中不断监听标记位, 一但标记位为 true 便执行函数, 同时调用父动画蓝图的函数清除标记位, 保证一次 true 只执行一次函数
动画融合
前面讲到的 BlendSpace AimOffset Montage 也属性动画融合
Montage
Montage 常用 API
除此之外, 在动画图表里还有一些用于动画融合的节点
Blend 节点
根据 Alpha 的值混合 姿势 A 和 姿势 B
1 | 混合姿势 = A* Alpha + B * (1 - Alpha) |
Blend Poses By 节点
根据 bool 或 int 值选择执行哪一个姿势
其实是一种选择结构, 并无太多融合的意味
Layered Blend By Per Bone 节点
基于每个骨骼的分层骨骼混合
这种混合方式可以只对某些骨骼进行混合,其他骨骼保持原姿势。
对哪些骨骼进行混合,以及混合的权重,都可以由我们自己决定。
比较典型的用法是在奔跑的时候切换武器,就可以将上半身用 站立时切换武器的动画 进行混合, 而下半身保持原奔跑姿势不变。
Apply Additive
暂时不懂-。-