条件的エクスプレッションを作成する

 
 
 

次の手順では、既定球を作成し、アニメーションの再生時間を基準にスケール Y (Scale Y)アトリビュートを増加させるエクスプレッションを記述します。アニメーション時間の最初の 2 秒間は、スケール Y は time の値とともに増加します。2 秒間が経過したら、スケール Y は増加しなくなります。

条件文を使用してエクスプレッションを作成するには

  1. レッスンの準備で説明されている手順を完了していることを確認してください。
  2. NURBS またはポリゴン球を原点に作成します。アトリビュート エディタで transform ノード(nurbsSphere1 または pSphere1)をクリックします。
  3. スケール X、スケール Y、スケール Z の値が 1 であることを確認します。この球の名前を Balloon に変更します。
    ヒント:

    Create > Polygon Primitive (作成 > ポリゴン プリミティブ)および作成 > NURBS プリミティブ(Create > NURBS Primitives)インタラクティブ作成(Interactive Creation)を使用不可にすると、既定で原点に、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 の値を特定の数値と比較する場合、time の値はミリ秒や分などの単位ではなく、秒として解釈されます。この例では、2 は 2 秒と解釈されます。

    代入 Balloon.scaleY = time が if (time < 2)の下にインデントされたフォーマットになっていることに注意してください。Maya ではステートメントとステートメントの間にあるインデント、余分なスペース、空白行はすべて無視されます。先の部分では、エクスプレッションを読みやすくするためにインデントが使用されています。また、同じエクスプレッションを次のように書くこともできます。

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

    これでは読みやすくありません。一貫性のある規則正しいスペーシングの習慣を身に付けてください。このレッスンではできるかぎり適切なスペーシングの例を示すようにしています。

  7. 作成(Create)ボタンをクリックして、エクスプレッションをコンパイルします。

    球が平らになります。

    作成(Create)をクリックすると、このエクスプレッションが実行されます。アニメーションはフレーム 0 なので、アニメーション時間は 0 です。time が 2 未満なので、Balloon.scaleY は time と同じ値(0)に設定されます。

    スケール Y アトリビュートの値が 0 である場合は、オブジェクトの高さが 0 になります(平らになります)。

  8. アニメーションを再生します。

    平らになった Balloon スケールが Y 軸にそって大きくなり、アニメーションの再生に従って膨らんでいきます。

    2 秒を過ぎると、Balloon はそれ以上膨らまなくなります。

    time が 2 以上になる場合、if 条件は true (真)ではなくなります。Balloon.scaleY = time 以降のステートメントは実行されなくなります。スケール Y アトリビュートの値は time が 2 になる直前の値、具体的に言うと、1.9583 のままになります。

    この例では、フレーム レートに 24 フレーム/秒が使用されていたことを思い出してください。time と Balloon.scaleY では、いろいろなフレームでこれらの値が使用されます。

    フレーム 時間(秒) 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 ヘルプを参照してください。

  9. アニメーションを停止して、開始時間に戻ってください。開始時間に移動すると、スケール Y アトリビュートが 0 になるので、Balloon は再びぺちゃんこになります。Time が 0 になり、スケール Y も 0 になります。