继前一篇 Significance 预算与布娃娃 / PhysicsControl 的冲突修复 之后,我们在角色基类上加了一层「离屏即 suspend PhysicsAsset / Collision」的优化(ApplyPhysicsVisibilitySuspension),通过缓存「是否处于战斗」状态把战斗中的敌人豁免,让 weapon trace / AOE 仍能命中离屏目标。
ARPG 战斗里经常会同时存在十几到几十个敌人,常见的优化做法是引入 Significance/Budget 系统:按距离、可见性给角色分桶(bucket),根据档位降低 tick 频率甚至关闭 PhysicsControl。这套系统在常态下表现良好,但只要扩大 Physics Control 被关闭的阈值范围,就会暴露出两个典型现象——它们来自同一个根因:Significance 不知道角色当下是不是 ragdoll。
1. 两个现象
| # | 现象 | 触发场景 | 关闭 Significance 后 |
|---|---|---|---|
| 1 | 远处敌人一帧布娃娃、一帧 T-Pose 反复切换 | 敌人数量多、布娃娃状态(击飞 / 击倒 / 死亡) | 消失 |
| 2 | 敌人缓慢"升天" | 击飞类技能(如 GA_KnockoutFly)的后半段(约 0.4–0.8s) |
消失 |
我们来详细解释一下 Unreal Engine 中 UAnimNotifyState::bIsNativeBranchingPoint 这个属性的含义和作用。
核心概念
首先,bIsNativeBranchingPoint 是一个布尔值成员变量,定义在 UAnimNotifyState 类中。它的名字直译为“是原生分支点”。
要理解它,关键在于理解“分支点(Branching Point)”这个概念。
-
什么是分支点?
- 在动画蓝图中,分支点是一个特殊的时间点,引擎会在此处暂停动画的评估,等待游戏逻辑(如蓝图或C++代码)决定下一步该做什么。
- 这通常用于需要同步或需要根据游戏状态做出精确决策的情况。例如:
- Root Motion 同步:确保角色的位移与动画帧完美对齐。
- 事件响应:在动画的特定帧,等待一个外部事件(如玩家输入、网络消息)来决定是继续播放、跳转到另一个动画还是执行其他操作。
- 复杂的动画过渡:在精确的时刻根据条件切换状态。
-
原生(Native)的含义:
- “原生”意味着这个功能是由引擎底层C++代码实现和驱动的,而不是在蓝图层级模拟的。它更高效、更精确。
Overlay Layer(覆盖层)是Unreal Engine动画蓝图中的一个强大功能,它允许你在基础动画之上叠加额外的动画效果,而不会影响底层动画状态机。
ALS4
通过设置不同的覆盖动画状态来去设置播放的覆盖的动画
在动画中设置不同部位的混合曲线:
在动画蓝图中Layer Blending中根据曲线来对姿势混合:
经常会遇到在角色播放特定动画是需要相机有一个特定的轨道动画,让表现更加的身临其境,比如在释放总结技能的时候,会有一些特写镜头。
使用Level Sequence来实现,有两种方式:
Level Sequence
效果如下:
创建步骤:
- 创建
Level Sequence - 创建相机
- 设置相机类型为
CameraActor - 关闭相机的固定比例
- 将主角蓝图拉入
Sequencer编辑器,并删除CharacterMesh0和Transform - 将相机附加到主角上
- 附加到
CharacterMesh0的root节点下 - 设置角色标签,用于替换运行时的主角。并将Spawned设置为关闭
- 设置相机运动轨迹
- 播放以及绑定主角
在Blender中显示角色骨骼跟在游戏引擎里显示的骨骼方式不一样。可以使用插件Fake Bone

在Unreal Engine中,Compatible Skeletons(兼容骨骼)是一种用于动画资源共享的机制。它允许不同但结构相似的骨骼(Skeletons)之间共享动画序列(Animation Sequences)、动画蒙太奇(Montages)、动画蓝图(Animation Blueprints)等资源。通过将一个骨骼定义为另一个骨骼的兼容骨骼,可以实现动画资源的复用,减少重复工作。
具体来说,当你在一个骨骼的设置中,将另一个骨骼添加到其Compatible Skeletons列表中时,这两个骨骼就被视为兼容,可以互相使用对方的动画资源。这在需要多个角色使用相同动画时非常有用,即使这些角色的骨骼不完全相同,但只要骨骼结构相似,就可以通过Compatible Skeletons实现动画共享。
在制作玩法时,常常会有两个角色之间有互动,同时播放动画表演的需求。比如处决,角色交互等。这其中关键点是需要预先设置好两个角色的相对位置,同时播放两个角色动画。
一般来说有两种做法:
- 参考骨骼,也就是在做主角色动画时,使用一根空骨骼作为副角色的位置。
- 插件:Contextual Animation
值得注意的是这两种方式最终都会使用Motion Warping来讲角色拉去到目标的位置和方向。