动画蓝图 AnimGraph 核心逻辑(虚幻引擎)
整体逻辑
动画图分为两条分支,通过枚举混合节点输出最终姿势:
- 上方分支:基础全身动画(待机/走路/跑步),对应普通移动状态
- 下方分支:基础动画 + 头部瞄准偏移,对应瞄准状态
- 混合节点:根据
E_PlayerState枚举值,在两种姿势间平滑切换 - 输出节点:将最终姿势输出,驱动角色显示

逐节点拆解
1. 基础姿势缓存与复用(性能优化)
Basic 状态机:存放最基础的 Locomotion 动画(待机、走、跑、跳等),输出完整基础全身姿势使用缓存姿势"Basic":缓存状态机输出,供多处复用- 上方分支直接读取原版基础姿势
- 下方分支读取后做头部修改
- 好处:状态机只计算一次,避免重复运算,是 UE 动画蓝图的标准性能优化手段
2. 下方分支:头部瞄准偏移链路
在不改变全身基础动画的前提下,单独让头部骨骼跟随瞄准点移动,实现"看向目标"的效果。
流程:
|
|
| 步骤 | 说明 |
|---|---|
| 本地到组件空间 | 骨骼动画默认是本地空间(相对父骨骼),要单独修改某根骨骼必须转到组件空间(相对于整个骨骼组件),否则修改会被父骨骼旋转带偏 |
| Transform Bone | 核心修改节点,针对 Head 骨骼:Alpha=1.0 完全应用偏移,Translation 连接 Aim Socket Location 驱动头部位移 |
| 组件空间到本地 | 修改完后转回本地空间,才能与其他姿势混合及输出 |
3. 混合姿势(按枚举 Blend Poses by Enum)
根据 E_PlayerState 枚举值切换不同动画姿势:
| 引脚/参数 | 作用 |
|---|---|
| 默认姿势 | 原版基础全身动画,对应普通移动、未瞄准状态 |
| AIM 姿势 | 修改过头部的瞄准姿势,对应开镜/瞄准状态 |
| 默认混合时间 0.2 | 切回普通状态时 0.2 秒平滑过渡 |
| AIM 混合时间 0.1 | 切入瞄准状态时 0.1 秒快速过渡,手感更跟手 |
| Active Enum Value | 接入 E_PlayerState 枚举变量,由角色蓝图控制 |
扩展性强:后续加换弹、奔跑、受伤等新姿势,只需在枚举新增选项,再给混合节点增加对应输入引脚。
4. 输出姿势(Result)
混合后的最终姿势输出,直接驱动骨骼网格体渲染。
设计要点
- 分层思想:基础全身动画是一层,瞄准偏移是叠加的一层,互不干扰
- 空间转换规范:修改单根骨骼必须走「本地 → 组件 → 本地」的转换流程
- 状态驱动动画:用枚举统一管理角色动作状态,比多个布尔变量更清晰、扩展性更好
- 平滑过渡:所有状态切换都带混合时间,保证动画衔接自然