该技能围绕“用代码编写 UAnimSequence”展开。核心思路是数据与控制器分离:序列的动画数据存放在 IAnimationDataModel 中,所有编辑都通过 IAnimationDataController(由 UAnimSequenceBase::GetController() 获取)执行;多步编辑应包裹在 OpenBracket/CloseBracket 之间,以形成单个事务并只重建一次。
主要用途包括:完全从代码创建新的 UAnimSequence 并填充骨骼轨道;将仅含动画、不含网格的 FBX 导入到已有骨架;在指定帧数值验证片段实际评估出的骨骼位置和旋转,而无需在视口中播放;以及排查已编写片段在角色上“位置不对”的问题。
使用方式上,C++ 侧通过 UAnimSequenceFactory 创建绑定骨架的资产,再经控制器调用 SetFrameRate、SetNumberOfFrames、AddBoneCurve、SetBoneTrackKeys 等接口;Python 侧对应 seq.controller 的 open_bracket、set_frame_rate、set_number_of_frames、add_bone_curve、set_bone_track_keys。轨道为局部空间且逐帧密集存储,SetNumberOfFrames(N) 表示 N 个帧间隔,需提供 N+1 个关键帧。需要特别注意四元数符号连续性,相邻关键帧点积为负时应取反,否则插值会导致骨骼塌陷。
导入仅含动画的 FBX 时,通过 UFbxImportUI 配置自动化 UAssetImportTask,关闭网格导入、开启动画导入并指定目标骨架,骨骼按名称匹配;应显式设置采样率,避免默认重采样。数值验证可使用 FAnimPose / UAnimPoseExtensions 在无视口下评估指定帧的骨骼姿态,并与目标关节几何进行比对。
限制与注意事项:未添加轨道的骨骼在评估和预览中会使用骨架资产的参考姿态;角色共享同一骨架资产时各网格比例不同,需按实际播放的网格比例编写,并可用静态轨道固定父链;编辑器资产库加载器在 PIE 期间返回空,但 StaticLoadObject/LoadObject 仍可用;未设置 TargetSkeleton 的工厂会弹出模态选择框;姿态评估不包含 AnimBP、Control Rig 或程序化修正,依赖这些的最终效果需通过 EvaluateAnimationBlueprintWithInputPose 检查;帧索引从 0 开始,而 DCC 时间线通常从 1 开始。