在以下步骤中,您将创建默认球体并编写表达式,以便根据动画播放时间增加其“缩放 Y”(Scale Y)属性。在前两秒动画时间内,“缩放 Y”(Scale Y)随 time 值增加。在两秒及之后的时间内,“缩放 Y”(Scale Y)将不再增加。
使用条件语句创建表达式
确保已完成课程准备中的步骤。
在原点处创建 NURBS 或多边形球体。在“属性编辑器”(Attribute Editor)中,单击变换节点(“nurbsSphere1”或“pSphere1”)。
确保 X 缩放、Y 缩放和 Z 缩放值等于 1。将球体重命名为 Balloon。
提示可以禁用“创建 > 多边形基本体”(Create > Polygon Primitives)和“创建 > NURBS 基本体”(Create > NURBS Primitives)下的“交互式创建”(Interactive Completion)选项,且默认情况下,您将在原点处创建 X、Y 和 Z 缩放值均为 1 的球体。
转到开始时间。
选定 Balloon 后,选择“窗口 > 动画编辑器 > 表达式编辑器”(Window > Animation Editors > Expression Editor)。
输入该表达式:
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;
这样就不方便阅读了。保持一致且有条理的间隔是良好的开发习惯。本课程将尝试尽可能提供良好间隔样式的示例。
单击“创建”(Create)以编译表达式。
球将展平。
单击“创建”(Create)时会执行表达式。因为动画位于第 0 帧,因此动画时间为 0。因为 time 小于 2,Maya 会将 Balloon.scaleY 设定为等于 time 的值,即 0。
scaleY 值为 0 会导致在 Y 尺度展平对象。
播放动画。
展平的 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。
除了本例中显示的 < 运算符外,还有几种其他关系运算符,例如 >、>=、== 等。
停止播放动画并转到开始时间。Balloon 将再次展平,因为 scaleY 属性在您转到开始时间时变为 0。time 为 0,因此 scaleY 也为 0。