如果表达式包含冗余的语句计算,可以禁用“求值:始终”(Always Evaluate)以加快动画的拖动和播放速度。若要了解此功能适用的情况,必须了解表达式执行的细微细节。
表达式通常在每次动画时间改变时执行。每当表达式读取的属性值更改,并且发生以下两个操作之一时,也会执行表达式:
在此上下文中,预定义的变量时间和帧也被视为表达式读取的属性。
假设您创建的表达式用于沿 Y 轴移动 NURBS 球体,移动距离为其在 X 轴当前平移值的两倍:
nurbsSphere1.translateY = 2 * nurbsSphere1.translateX;
如果在工作区中使用“移动工具”(Move tool)沿 X 轴方向拖动球体,Maya 会为拖动时“translateX”属性的每次增量改变执行该表达式。
沿 X 方向拖动球体会更改表达式中“translateX”属性的值。当您拖动球体而使 Maya 更新工作区的显示时,表达式中“translateY”属性的值会发生改变。这种改变会使表达式执行。
如果禁用“求值:始终”(Always Evaluate),并且表达式只包含打印函数语句、变量指定或不读取属性值的指定,则该表达式不会执行。
global float $BallHeight = 5; print($BallHeight+"\n"); nurbsSphere1.tx = rand(1); print(nurbsSphere1.tx+"\n");
第一条语句声明值并将其指定给变量 $BallHeight(不是属性)。下一条语句打印 $BallHeight,但不指定任何属性值。
下一条语句为属性指定值,但该值是由随机数函数 rand 生成的。该函数不读取属性值。有关 rand 函数的详细信息,请参见 rand。
禁用了“求值:始终”(Always Evaluate)时,这些操作都不会使表达式执行。
“求值:始终”(Always Evaluate)仅影响您要创建或编辑的表达式。可以为一个表达式启用该设置,而为另一个表达式禁用该设置。
对于大多数动画,无论是否启用“求值:始终”(Always Evaluate),表达式都会执行。如果有疑问,请保持启用状态。