在“表达式编辑器”(Expression Editor)中键入表达式后,单击“创建”(Create)或“编辑”(Edit)按钮以编译表达式。编译表达式时会检查表达式是否存在语法错误,并将表达式转化为一种 Maya 可在您回放或播放动画时执行的形式。编译后,系统会对当前帧执行该表达式。
默认情况下,当前动画时间或帧发生更改,系统还会执行表达式。例如,回放或播放动画时,系统会执行表达式。每次动画帧或时间发生更改时,系统都会执行一次表达式。 要停止此默认求值,请在表达式编辑器中将表达式节点“求值”(Evaluation)模式设置为“按需”(On Demand)。
表达式中直接引用的属性更改值时,也会执行表达式。例如,当表达式将球体的“translateX”属性指定给另一个属性时,如果沿“X 轴”(X-axis)方向移动球体,系统将对球体的每个移动增量执行表达式。
pCube1.tx = pSphere1.tx * 3.0
选择对象而不是粒子形状节点时,可以使用“表达式编辑器”(Expression Editor)中的“求值”(Evaluation)下拉菜单来设定表达式的执行时间。(如果选择粒子形状节点,“表达式编辑器”(Expression Editor)将灰显该菜单。有关粒子形状节点表达式的详细信息,请参见关于粒子表达式。)
编写表达式时,可以直接访问对象属性或使用 MEL 进行访问(请参见下文的注意)。
直接:
pCube1.tx = pCube2.ty * 3.0
MEL:
setAttr pCube1.tx (`getAttr pCube2.ty`* 3.0)
如果“求值”(Evaluation)设置为“按需”(On Demand),则仅表达式的输入连接发生更改(在上述示例中,当 pCube2.ty 的值发生更改时),或在“表达式编辑器”(Expression Editor)中单击“编辑”(Edit)时,系统会计算表达式。如果“求值”(Evaluation)设定为“始终”(Always),即使场景中的内容没有发生更改,每帧更改也都将触发求值。
如果“求值”(Evaluation)设置为“始终”(Always),则仅时间发生更改时才会强制对表达式求值。因此,在场景视图中操纵对象时,使用包括 MEL 表达式并将“求值”(Evaluation)设置为“始终”(Always)的解决方案不会求值,除非是在“交互式播放”(Interactive Playback)期间使用。