找回密码
 立即注册
查看: 230|回复: 0

【UE】动画属性编辑器开发文档

[复制链接]
发表于 2023-1-24 09:35 | 显示全部楼层 |阅读模式
概述


    动画轨道在动画系统中非常常见,它与动画资源绑定,用于记录动画片段播放时的状态。常见的动画标记有动画曲线(Animation Curve)、同步标记(Step Tag)、动画通知(Notify)等,之后会详细介绍。
    实际使用中,部分曲线仅作开关使用,0表示关,1表示开,这类曲线规则简单且复用性高,比较适合通过编辑器脚本批量添加、删除和修改。本文介绍了在实际研发过程中开发和迭代的几个动画曲线、同步标记的批量编辑脚本的开发思路和使用方法

复制曲线(Copy Curves)


界面介绍





复制曲线界面


  • 【Copy Type】
复制曲线的方式,可选择从特定动画中复制或者根据命名关键字替换搜索获取
(比如不同角色的同一动画配置相同)

  • 【From Sequence】
如果选择从特定动画中复制,需要选择复制的动画资源。

  • 【Copy All Curves】
是否复制所有曲线,当前版本(5.0.3)存在bug,仅支持复制所有曲线,预计在升级5.1后得到修复。

  • 【Curves to Copy】
如果不复制所有曲线,可在此数组中填写需要复制的曲线名。(虚幻5.0.3数组变量有问题,暂不可用)

  • 【Search】
搜索的关键字

  • 【Replace】
替换的关键字

  • 【Search Case】
搜索是否区分大小写

开发思路


Tips:点击上面的链接查看完整蓝图

  • 获取需要复制的动画资源
  • 获取动画资源中的所有曲线名:Get Animation Curve Names
  • 根据曲线名获取Times & Values :Get Float Keys
  • 判断粘贴的动画资源是否包含改曲线,包含则删除。
  • 新增曲线,设置值: Add Float Curve Keys
备注:由于添加曲线的插值默认类型只能是Linear,如果需要修改Value的类型可能需要C++侧提供对应的接口。
<hr/>
添加曲线(Add Curve)


界面介绍





  • 【Default Value】
添加曲线的默认值,会在第0帧设置为这个值。

  • 【Curve Name】
选择已有的曲线名。

  • 【New CUrve Name】
若下拉列表中没有,则填写需要新增的曲线名。

  • 【Is New Curve】
若下拉列表中没有,则勾选此选项。

开发思路


Tips:点击上面的链接查看完整蓝图

  • 获取需要添加曲线的动画资源。
  • 判断曲线是否存在,如果存在则删除。
  • 根据是否为新曲线判断从枚举还是从字符串获取数值。
  • 添加对应命名的曲线,在第0帧K帧默认值。
<hr/>
添加同步标记(Add Step Tag)


界面介绍






  • 【Step On Value】
脚到地面的距离,用于判断脚是否落地。

  • 【Left Foot Name】
左脚骨骼命名

  • 【Left Foot Offset】
左脚落地的距离相对于Step On Value的偏移量

  • 【Right Foot Name】
右脚骨骼命名

  • 【Right Foot Offset】
右脚落地的距离相对于Step On Value的偏移量

开发思路


Tips:点击上面的链接查看完整蓝图

  • 规定:同步标记总是以Step L → Step R → Step L → Step R进行,其中Step L表示左脚落地,Step R表示右脚落地。
  • 逐帧读取动画帧中左右脚的Z轴坐标,当某只脚离地距离小于Step On Value时,根据标签顺序判断是否需要打同步标记。
  • 仅在第一次满足条件时打同步标记,避免重复。
备注:当前方案不好用的原因是不同角度下角色脚落地的距离差异较大
修改思路:同类型的动画时长、节奏往往相同,可根据既定的时间点结合阈值进行微调,比如在给定时间点正负一段时长内的最小值。

<hr/>
设置叠加动画(Set Additive Animation)


界面介绍






  • 【Additive Animation Type】
叠加动画的类型  No additive / Local Space / Mesh Space

  • 【Base Sequence】
如果从其他动画选帧作为参考,base的动画资源

  • 【Additive Base Pose Type】
Base Pose的类型,可选择参考 绑定姿势 / 特定动画 / 特定动画帧 / 自身动画的某一帧

  • 【Ref Index】
参考Base动画的哪一帧

开发思路


Tips:点击上面的链接查看完整蓝图

  • 获取需要设置叠加的动画资源
  • 通过python脚本设置叠加(蓝图API拿不到部分属性)
  • 执行和保存
Python Part:
import unreal
def SetAdditiveSettings(anim_sequence, ref_pos_seq, ref_pose_index):
    sequence = unreal.EditorAssetLibrary.load_asset(anim_sequence)
    sequence.set_editor_property("ref_pose_seq", unreal.EditorAssetLibrary.load_asset(ref_pos_seq))
    sequence.set_editor_property("ref_frame_index", ref_pose_index)参考文档

https://zhuanlan.zhihu.com/p/141825438
https://zhuanlan.zhihu.com/p/433929708

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 04:32 , Processed in 0.091970 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表