我们来详细解释一下 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实现动画共享。
使用
将角色的当前的姿态保存一份,后续对保存的姿态进行处理。
-
保存姿势函数:
- UAnimInstance::SavePoseSnapshot(FName SnapshotName)
- UAnimInstance::SnapshotPose(FPoseSnapshot& Snapshot)
-
使用保存姿势在动画蓝图中用
Pose Snapshot节点。
过场动画过渡
效果如下:
这是因为角色开启了IK处理:
只需要在上楼梯时,关闭IK即可。当速度为0时再开启IK即可。
修改后的结果:
在停步时会出现角色下移很明显的情况,可以调整楼梯的碰撞盒的高度来解决
物理控制组件允许您创建和管理多个控件,通常每个身体部位可以有多个控件。
分为两大类:
基础概念
Control
用于控制一个物理体相对于另一个物理体或者世界空间下,这些控制通过物理弹簧或者阻尼器驱动。这些控件可以在世界空间或父空间(类似于肌肉)中工作。每个控件都可以控制任意一对骨骼网格或静态网格(甚至是演员以外的网格)
创建
其中是Control Data是FPhysicsControlData结构体,用来控制阻尼弹簧模型,其基本原理公式如下:
在做玩法时,经常会有一个需求根据角色当前的播的动画触发一些特殊规则。
比如角色在待机状态下和行走状态下他的相机的FOV不同,最先想到的使用动画通知来制作该需求,在两个动画中配置对应的FOV设置再应用即可。如果这样的需求多起来,就会有很多动画通知。
那如果想要做变化值的插值、或者处于该动画时,需要实时检查一些东西、该动画结束后需要做一些操作。这样自然就会想到把播放该动画作为一个状态。
正常来说角色的locomotion是使用的动画蓝图中的状态机来实现,那可以将这个状态机作为基础,对动画中的状态添加一个对应控制Gameplay的状态。