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

setKeyframe 呼び出しで値を設定していないと思います。@argiri のソリューションが機能した理由は、彼が属性を設定してから、現在の値をキー設定する引数なしで 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 に答える