我需要修复我的脚本,只需编写一个grab_animation函数,一个save_animation函数,最后是我的restore_animation。
在这里。
def restore_animation(path, animation_dictionary=None):
dict_file = open(path, 'rb')
dict_anim_pkld = pickle.load(dict_file)
dict_file.close()
for each_frame in dict_anim_pkld:
cmds.currentTime(each_frame)
for each_obj in dict_anim_pkld[each_frame]:
for each_attr in dict_anim_pkld[each_frame][each_obj]:
cmds.setKeyframe('{0}.{1}'.format(each_obj,each_attr))
cmds.setAttr ('{0}.{1}'.format(each_obj,each_attr), dict_anim_pkld[each_frame][each_obj][each_attr]['value'])
问题是,该功能运行良好,但它只恢复动画的值,但不设置每个关键帧的键。
我知道我必须实现的命令是cmds.setKeyframe
,但经过大量测试后它还无法正常工作。谁能帮帮我?
答案 0 :(得分:0)
一个问题可能是您将对象和属性名称都传入cmds.setKeyframe()。通常,对象属性返回整个名称。即“polyCube1.translateX”,所以当您在cmds.setKeyframe('{0}.{1}'.format(each_obj,each_attr))
中输入时,它确实告诉它cmds.setKeyframe('polyCube1.polyCube1.translateX')
。您的cmds.setAttr()
也是如此。
答案 1 :(得分:0)
我认为你没有在setKeyframe调用中设置值。 @ argiri的解决方案工作的原因是他设置属性然后调用没有args的setKeyframe,它键入当前值。我想你想要:
cmds.setKeyframe('{0}.{1}'.format(each_obj,each_attr),
v=dict_anim_pkld[each_frame][each_obj][each_attr]['value'],
t=each_frame)
假设dict_anim_pkld [each_frame] [each_obj] [each_attr] ['value']是你存储旧值的方式,而each_frame是Maya可识别的时间值