1

我需要修复我的脚本,只写了一个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但是经过大量测试后它还不起作用。谁能帮我?

4

2 回答 2

1

一个问题可能是您将对象和属性名称都传递到 cmds.setKeyframe() 中。通常对象属性返回整个名称。即“polyCube1.translateX”,所以当你输入它时,cmds.setKeyframe('{0}.{1}'.format(each_obj,each_attr))它真的在告诉它cmds.setKeyframe('polyCube1.polyCube1.translateX')。你的cmds.setAttr().

于 2013-07-15T19:18:02.560 回答
1

我认为您没有在 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 可以识别的时间值

于 2013-07-15T21:55:54.210 回答