不同骨骼共享动画蓝图

在实际项目中,开发者有时希望不同的骨架间共享同一套动画蓝图,尤其是状态机的重用,从而实现动画转换逻辑的统一的配置。实际运行时仍然使用骨架对应的动画资源。例如不同种类怪物的动画状态机共享。

引擎中的动画蓝图是与骨架绑定的,无法直接跨骨骼应用;这里给出一个简单的蓝图使用小技巧来实现动画蓝图的共享。

示例工程:

下载链接:https://pan.baidu.com/s/1FIWdNvgcYakajbTqJE89LA
适用版本:引擎版本 4.22.2 or later

思路

1、创建一个父动画蓝图 A,在A中实现各种动画以及转换,并且A中使用到的各种动画片段或者是混合空间全部参数化,普通动画片段的参数类型是Anim Sequence Base
2、创建一个不同于A的骨骼的动画蓝图B,创建之后修改B的父类为A,并且在B 的两个Graph都不能添加或者是实现任何
3、这样在B中就可以看见参数化的动画片段或者是混合空间,给它们赋值,
4、这样便实现了不同骨骼使用一个动画蓝图

示例说明:

  1. 打开项目,地图中有两个角色,一个Mixamo_Goblin,一个IggyScorch_Phoenix角色;使用不同骨骼及模型,但共用了同一个动画蓝图(Mixamo_AnimBP_Parent)中的设置。
  2. 运行游戏;可以控制IggyScorch_Phoenix跑跳攻击等;它的动画蓝图(IggyScorch_Phoenix_AnimBP)继承父级的动画蓝图(Mixamo_AnimBP_Parent);角色资产被替换成自己Skeleton对应的动画资产。
  3. 调整修改Mixamo_AnimBP_Parent,再次运行游戏查看父级的动画蓝图的修改对IggyScorch_Phoenix角色的影响。

制作说明:

  • 不同角色需继承自相同Character蓝图,保证操作以及传入动画蓝图的变量相同。
  • 基础动画蓝图的Animation Sequence Object Reference需要使用Pin创建变量,以便在被继承后可以替换动画。
  • 为其中一套骨架创建新的动画蓝图, Parent 指定为基础动画蓝图,并替换掉变量中指定的动画资源。
    在这里插入图片描述
  • 动画资源仅可使用当前骨架相关联的资源;无法使用基础动画蓝图关联的资源;如果要使用基础动画蓝图关联的骨骼的动画资源需要对其做复制并且Retarget操作
  • 状态Transition的逻辑需要改成比例相关(Get Relevant Anim Time Remaining Fraction),而不是时间相关,因为被替代后动画长度有可能不同
  • 在当前子动画蓝图无法再增加额外的动画逻辑;需要的话可以加在角色的Postprocess
    动画蓝图中,比如物理动画。或者再创建一个动画蓝图,并使用Sub Anim Instance指定当前子动画蓝图为Instance Class,从而扩展混合逻辑。
  • 父级动画蓝图不要有基于特定骨骼的修改,否则继承后丢失骨骼信息出错。
  • 在Python文件夹里提供了一个示例,该脚本根据指定的Parent Anim Blueprint 和 Child Skeleton
    来生成Child Anim Blueprint,同时根据设定的命名规则来替换来对应的Anim Asset

Tips & Tricks —— 跨骨架共享动画蓝图

<think>好的,我现在要处理用户的问题:“闪电是因为动画多线程更新 那么live link pose前加什么节点可以使闪电符号消失”。首先,我需要理解用户提到的“闪电符号”是什么。根据之前的对话历史,用户可能在使用Unreal Engine时遇到了警告或提示,导致界面出现闪电图标。这个闪电符号通常与多线程资源冲突有关,比如动画蓝图中的线程安全问题。 用户的问题中提到“闪电是因为动画多线程更新”,所以需要确认在动画蓝图中,当启用多线程动画更新时,某些节点可能引发资源竞争,导致引擎显示警告图标。而用户希望通过在Live Link Pose节点前添加某个节点来解决这个问题。 接下来,我需要回忆Unreal Engine中动画蓝图的相关知识。Live Link Pose用于实时传输动作数据,可能在多线程环境下使用时,如果没有正确处理线程安全,会导致资源冲突。闪电符号的出现通常提示存在潜在的线程安全问题,需要确保节点在正确的线程中执行。 根据之前的解决方案,用户之前的问题是关于控制台变量的线程安全,解决方法包括添加线程安全标志或调整线程调用。类似地,在动画蓝图中,可能需要确保某些节点在主线程运行,或者在访问共享资源时进行同步。 可能的解决方法是使用“Pre Update”事件节点,或者强制某些逻辑在主线程执行。例如,在Live Link Pose之前添加“Force Update After Blend”节点,或者使用“AnimNotify”来同步数据。此外,可能需要检查Live Link的设置,确保数据在正确的线程中处理。 还需要考虑用户可能对动画蓝图节点不太熟悉,因此需要详细说明步骤,并给出具体的节点名称和操作流程。例如,在动画蓝图中,添加一个“DoOnce”节点或“Sequence”节点来确保Live Link Pose的调用在主线程完成。 此外,可能需要检查动画蓝图的设置,确保启用了正确的线程安全选项,或者调整动画更新的线程模式。如果问题依旧,可能需要查看引擎日志,确认是否有相关的警告信息,进一步调整代码或节点配置。 总结,用户的问题可能是在多线程动画更新时,Live Link Pose节点导致线程冲突,出现闪电警告。解决方法是在其前添加确保线程安全的节点,比如强制主线程更新或同步节点,以消除警告。</think>--- 在Unreal Engine中,动画蓝图中的**闪电符号**通常表示存在**多线程资源冲突**,尤其是当动画系统尝试在多线程环境下访问未正确同步的共享数据(如Live Link Pose数据)时。以下是具体解决方案: --- ### 问题根源 1. **闪电符号的含义**: 闪电符号是UE对潜在**多线程资源竞争**的警告,表明某些动画节点(如`Live Link Pose`)在并行更新时可能未正确同步数据,可能导致动画撕裂或逻辑错误。 2. **Live Link Pose的特殊性**: Live Link数据通常通过外部线程(如网络或设备线程)实时传输,若直接在动画蓝图中使用,可能因未同步而触发多线程冲突。 --- ### 解决方案:强制单线程同步 在`Live Link Pose`节点前添加 **`Pre Update`事件节点** 或 **`Force Update`逻辑**,确保数据在主线程中完成更新后再被动画线程访问。 #### 方法1:使用 **`Pre Update` 事件**(推荐) 1. **原理**: `Pre Update`事件会在动画蓝图**主线程更新前**触发,强制同步Live Link数据。 2. **步骤**: - 在动画蓝图中添加`Event Pre Update`节点。 - 将`Event Pre Update`的输出引脚连接到`Live Link Pose`的执行引脚。 ```plaintext [Event Pre Update] → [Live Link Pose] ``` 3. **效果**: 通过主线程提前更新Live Link数据,避免多线程竞争,闪电符号消失。 --- #### 方法2:添加 **`Sequence` 或 `DoOnce` 节点** 1. **原理**: 通过控制执行流程,强制Live Link数据在特定阶段更新。 2. **步骤**: - 在`Live Link Pose`前插入`Sequence`节点,分离数据更新逻辑。 - 或使用`DoOnce`节点限制每帧仅更新一次。 ```plaintext [Event Blueprint Update Animation] → [Sequence] → [Live Link Pose] │ └→ [其他动画逻辑] ``` --- #### 方法3:禁用多线程动画更新(临时方案) 1. **原理**: 关闭动画系统的多线程优化,强制所有动画逻辑在主线程运行。 2. **操作**: - 在项目设置中修改: `Project Settings → Engine - Animation → 取消勾选 "Enable Multi-threaded Animation Update"` - 重启编辑器生效。 3. **代价**: 可能降低动画性能,仅建议调试时使用。 --- ### 验证修复效果 1. 重新编译并运行动画蓝图。 2. 观察闪电符号是否消失。 3. 检查动画是否流畅无撕裂。 --- ### 扩展:Live Link Pose的最佳实践 1. **数据缓存**: 在`Event Graph`中通过变量缓存Live Link数据,避免直接在多线程中访问实时流。 ```plaintext [Event Pre Update] → [Live Link Pose] → [Set CachedPoseVariable] [AnimGraph] → [Get CachedPoseVariable] ``` 2. **线程安全标记**: 若自定义动画节点涉及Live Link,需添加`ANIM_THREAD_SAFE`宏声明: ```cpp // C++节点类声明 class UMyAnimNode : public FAnimNode_Base { ANIM_THREAD_SAFE() // 声明线程安全 // ... }; ``` --- ### 常见关联问题 - 若未解决闪电警告,可能进一步导致: - 动画逻辑错乱(如骨骼错位) - 游戏线程卡顿(主线程过载) - Live Link数据延迟或丢失 若问题持续,请检查: 1. Live Link数据源的线程模型(如ARKit、Motion Capture设备)。 2. 动画蓝图中是否存在其他多线程节点(如`Parallel Anim Evaluation`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值