创建条件表达式
 
 
 

在以下步骤中,您将创建默认球体并编写表达式,以便根据动画播放时间增加其“缩放 Y”(Scale Y)属性。在前两秒动画时间内,“缩放 Y”(Scale Y)随 time 值增加。在两秒及之后的时间内,“缩放 Y”(Scale Y)将不再增加。

使用条件语句创建表达式

  1. 确保已完成课程准备中的步骤。
  2. 在原点处创建 NURBS 或多边形球体。在“属性编辑器”(Attribute Editor)中,单击变换节点(“nurbsSphere1”“pSphere1”)。
  3. 确保 X 缩放、Y 缩放和 Z 缩放值等于 1。将球体重命名为 Balloon
    提示

    可以禁用“创建 > 多边形基本体”(Create > Polygon Primitives)“创建 > NURBS 基本体”(Create > NURBS Primitives)下的“交互式创建”(Interactive Completion)选项,且默认情况下,您将在原点处创建 X、Y 和 Z 缩放值均为 1 的球体。

  4. 转到开始时间。
  5. 选定 Balloon 后,选择“窗口 > 动画编辑器 > 表达式编辑器”(Window > Animation Editors > Expression Editor)
  6. 输入该表达式:
    if (time < 2)
    	Balloon.scaleY = time;
    

    该表达式是一个 if 语句。if 关键字导致表达式基于两个或多个项的比较作出决定。本例中,表达式会将 time 值与值 2 进行比较。

    表达式会检查 time 的值是否小于 2 秒。如果小于 2 秒,将指定 Balloon.scaleY = time。如果 time 不小于 2 秒,则不会进行指定。

    注意

    将 time 的值与表达式中的数字进行比较时,Maya 将 time 解释为秒而不是毫秒、分钟或其他任何单位的时间。在本例中,Maya 将 2 解释为 2 秒。

    请注意指定 Balloon.scaleY = time 时的格式设置方式,看看它是如何在 if (time < 2) 下方缩进的。Maya 会忽略语句之间的所有缩进、额外空格以及空行。我们使用缩进让表达式更清楚易读。也可按如下方式编写表达式:

    if (time < 2) Balloon.scaleY = time;
    

    这样就不方便阅读了。保持一致且有条理的间隔是良好的开发习惯。本课程将尝试尽可能提供良好间隔样式的示例。

  7. 单击“创建”(Create)以编译表达式。

    球将展平。

    单击“创建”(Create)时会执行表达式。因为动画位于第 0 帧,因此动画时间为 0。因为 time 小于 2,Maya 会将 Balloon.scaleY 设定为等于 time 的值,即 0。

    scaleY 值为 0 会导致在 Y 尺度展平对象。

  8. 播放动画。

    展平的 Balloon 的比例沿其 Y 轴增加。它将在动画播放期间膨胀。

    在两秒及之后的时间内,Balloon 将不再膨胀。

    如果 time 大于等于 2,if 条件将不再为 true。随后的 Balloon.scaleY = time 语句也不再执行。scaleY 属性的值保持为在 time 变为 2 之前具备的最后一个值,具体而言是 1.9583。

    请回忆一下,本例使用的帧速率为每秒 24 帧。time 和 Balloon.scaleY 在不同帧处具有以下值:

    time(以秒为单位) Balloon.scaleY (time)

    0

    0

    0

    1

    0.0417

    0.0417

    2

    0.0833

    0.0833

    3

    0.125

    0.125

    24

    1.0

    1.0

    47

    1.96

    1.9583

    48

    2.0

    1.9583

    49

    2.04

    1.9583

    if 语句的条件 (time < 2) 是一个比较。条件必须由圆括号包围,以便将其与跟随在其后的指定隔开。

    条件中的 < 是一种关系运算符。关系运算符测试一个值与另一个值具有什么关系。在本例中,< 测试 time 是否小于 2。

    除了本例中显示的 < 运算符外,还有几种其他关系运算符,例如 >、>=、== 等。有关详细信息,请参见“Maya 帮助”(Maya Help)

  9. 停止播放动画并转到开始时间。Balloon 将再次展平,因为 scaleY 属性在您转到开始时间时变为 0。time 为 0,因此 scaleY 也为 0。