【发布时间】:2020-10-12 01:30:49
【问题描述】:
我正在寻找一种解决方案来创建脚本作业,只要我在图形编辑器中对动画曲线进行任何更改,就可以打印一些东西。假设我通过更改值或时间来修改键,或者我修改它的切线。
在文档中,脚本作业有一个像“SelectionChanged”或“AttributeChanged”这样的事件,所以当其中一个事件为真时,我可以运行任何脚本。 但是当我想在图形编辑器中收听动画曲线变化时,我遇到了问题。您知道不使用 Maya API 的任何解决方案吗?在python中可行吗?
一切顺利, 彼得
更新:
好吧,在细节方面我和往常一样有点麻烦:)。
(我希望我以正确的方式更新我的问题,但我需要提供代码,因为我仍然有问题)
@Green Cell,我使用了您的代码,但作为内部函数,我想在其他 animcurve 上设置键,因此,在修改 'animCurve_A' 后,我得到几秒钟的延迟,然后出现“RuntimeError:最大递归深度超出”和“警告:Python 动画回调失败”(但是当我使用例如 setAttr 命令时它可以工作)。更具体地说,这是我想展示我的问题的简化代码。
import maya.cmds as cmds
import maya.OpenMaya as OpenMaya
import maya.OpenMayaAnim as OpenMayaAnim
#create empty animation curve and make 2 keyframes
cmds.createNode('animCurveTL', n='animCurve_A')
cmds.setKeyframe('animCurve_A', t=0, v=0)
cmds.setKeyframe('animCurve_A', t=10, v=10)
#create second empty animation curve
cmds.createNode('animCurveTL', n='animCurve_B')
#create callback from animCurve_A to drive animCurve_B
def func(mobj_array, client_data):
for i in range(mobj_array.length()):
if OpenMaya.MFnDependencyNode(mobj_array[i]).name() == 'animCurve_A':
cmds.setKeyframe('animCurve_B', t=0, v=0)
cb = OpenMayaAnim.MAnimMessage.addAnimCurveEditedCallback(func)
任何线索我做错了什么?... :(
【问题讨论】: