我正在寻找一个解决方案来创建一个脚本作业,让我在graph editor中对动画曲线进行任何更改时都可以打印一些内容。假设我通过更改值或时间来修改关键点,或者修改其切线
在文档中,脚本作业有一个类似“SelectionChanged”或“AttributeChanged”的事件,因此当其中一个事件为true时,我可以运行任何脚本。 但当我想在graph editor中收听动画曲线变化时,我遇到了一个问题。您是否知道任何不使用Maya API的解决方案。它在python中可行吗
非常好, 皮奥特
更新:
好吧,我遇到了一些麻烦,就像在细节方面一样:)
(我希望我正在以正确的方式更新我的问题,但我需要提供一个代码,因为我仍然有一个问题)
@Green Cell,我使用了您的代码,但作为内部函数,我想在其他animcurve上设置键,因此,在修改'animcurve_a'后,我会有几秒钟的延迟,在这之后会出现“RuntimeError:maximum recursion deph Extered”和“Warning:Python anim callback failed”(但当我使用例如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)
有什么线索表明我做错了什么吗?…:(
文档中有一个类似的示例,因此您可以使用
scriptJob
的attributeChanged
参数:每当pSphere1的translateY被更改时,这将触发
func
。在移动关键点、更改关键点的值和更改切线的角度时,在曲线图编辑器中编辑其曲线时,它也会激发编辑:
我知道您提到了“不使用Maya API”,当对动画曲线进行任何修改时,会使用
MAnimMessage
触发but there's a way to add a global callback。下面是一个例子:在函数内部,您需要添加一个
if
检查,看看它是否是您的自定义曲线。这可以通过名称来完成,或者只是在其上添加一个自定义属性并检查它是否存在。曲线不需要连接到任何属性,并且仍将自行触发。这会在图形编辑器之外的任何修改时触发,因此添加/删除/移动关键点,更改属性编辑器中的值;但这是有道理的,无论如何都是可以预料的相关问题 更多 >
编程相关推荐