表达式的执行频率
 
 
 

“表达式编辑器”(Expression Editor)中键入表达式后,单击“创建”(Create)“编辑”(Edit)按钮以编译表达式。编译表达式时会检查表达式是否存在语法错误,并将表达式转化为一种 Maya 可在您回放或播放动画时执行的形式。编译后,系统会对当前帧执行该表达式。

只要当前动画时间或帧发生更改,系统就会执行表达式。例如,回放或播放动画时,系统会执行表达式。每次动画帧或时间发生更改时,系统都会执行一次表达式。

Maya 在表达式中使用属性时,系统也会执行表达式。例如,当表达式将球体的“translateX”属性指定给另一个属性时,如果沿“X 轴”(X-axis)方向移动球体,系统将对球体的每个移动增量执行表达式。只有在直接引用球体属性的情况下,才会出现上述结果。

求值

选择对象而不是粒子形状节点时,可以使用“表达式编辑器”(Expression Editor)中的“求值”(Evaluation)下拉菜单来设定表达式的执行时间。(如果选择粒子形状节点,“表达式编辑器”(Expression Editor)将灰显该菜单。有关粒子形状节点表达式的详细信息,请参见粒子表达式。)

编写表达式时,可以直接访问对象属性或使用 MEL 进行访问

直接:

pCube1.tx = pCube2.ty * 3.0

MEL:

setAttr pCube1.tx (`getAttr pCube2.ty`* 3.0)

直接访问对象的属性后,Maya 将在节点间为这些属性建立连接。这意味着 Maya 的已定向图求值过程会自动识别 pCube2.ty 值的更改,并将 pCube1.tx 标记为灰色(需要重新求值),不管“求值”(Evaluation)选项是否设定为“始终”(Always)

如果某个对象的属性是通过 MEL 脚本访问的,Maya 将不会为节点的相关属性建立连接,因此将忽略已定向图求值过程。若要确保 pCube1.tx 的值一直最新,必须将“求值”(Evaluation)选项设定为“始终”(Always),以便可以在需要时触发求值。

有时,若要减少多余的表达式执行并加快 Maya 操作速度,将“求值”(Evaluation)设定为“按需”(On demand)将非常有用。执行该操作之前,最好先了解有关表达式执行的详细信息。

如果“求值”(Evaluation)设定为“按需”(On demand),则仅表达式的输入连接发生更改(在上述示例中,当 pCube2.ty 的值发生更改时),或在“表达式编辑器”(Expression Editor)中单击“编辑”(Edit)时,系统会计算表达式。如果“求值”(Evaluation)设定为“始终”(Always),即使场景中的内容没有发生更改,每帧更改也都将触发求值。

注意

如果“求值”(Evaluation)设定为“始终”(Always),则仅时间发生更改时才会对表达式求值。因此,在场景视图中操纵对象时,使用包括 MEL 表达式并将“求值”(Evaluation)设定为“始终”(Always)的解决方案不会求值,除非是在“交互式播放”(Interactive Playback)期间使用。