需要修复我的脚本 - cmds.setKeyframe错误

时间:2013-07-15 18:01:09

标签: python maya keyframe

我需要修复我的脚本,只需编写一个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,但经过大量测试后它还无法正常工作。谁能帮帮我?

2 个答案:

答案 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可识别的时间值