dA-tools.com

HOME > AfterFx > expression > 実践 > 次元・インデックス

配列、次元

一組で意味を持つ値

配列、ベクトル

  • レイヤーには様々なプロパティ(位置、スケール、回転、不透明度)がありますがアニメーションでよく使うのが「位置」でしょう。位置は4とか20という単独の数字では表現できません。X座標とY座標の値を一組にして初めて画面上の位置を決定することができます。このように2つ以上の値を組にしてまとめたペアを配列」と呼びます。
  • 配列では値と値を「カンマ」で区切り、それをカッコでくくって表します。配列を使うと1つの変数で複数の値を扱うことが出来るので便利です。なおAfterFxでは位置の配列を特に「ベクトル」と呼びます。
  • 'audioLevels' は左と右のチャンネルのレベルというペアの値ですが、これはポイントや方向を表しているわけではないので、「ベクトル」とは呼びません。

例:01

  • 座標の原点と画面右下。

origin=[ 0 , 0 ]
R_bottom=[ 640 , 480 ]

例:02

  • 色も配列で表現します。白と黒は次のようになります。

color=[R,G,B,alpha]

white=[ 1,1,1,0 ]
black=[ 0,0,0,0 ]

すると下のような式を書くことが出来ます。

color=( white + black ) / 2

次元

  • 値が2つのペアを2次元、3つを3次元と呼びます。色はrgbにアルファを含めた4次元です。回転など単一の値は1次元で、通常はただ「数、値」と呼ばれます。
  • エクスプレッションではこの次元の認識が重要です。
  • 計算結果の次元と適用するプロパティの次元が違っていたらAfterFxはエラーを生成しエクスプレッションを使用不可にします。これは最も一般的なエラーの1つです。この問題を回避するにはパラメーターが必要とする次元を常に気にかけるようにしてください。他のパラメーターを参照する場合も同様です。
  • 参照先と参照元の次元をマッチさせることは重要です。

次元、インデックス

次元の変換?

ここで簡単な実験をしてみましょう。

  • 2次元のプロパティ「位置」から1次元のプロパティ「回転」へピックウィップをドラッグするとどうなるでしょう?
  • 結果は下のようになりました。

[ rotation , rotation ]

AfterFxのバージョンによっては次のようになります。

temp = transform.rotation;
[temp, temp]

  • 「位置」は2次元、つまりXとY、2つの値を必要とするのに対し「回転」は1次元、つまり1つの値しかありませんから次元が合いません。しかしピック・ウィップは「回転」の値をXとY両方に自動的に適用してくれます。これはエラーを起こさないためのささやかな思いやりです。ただしエラーが回避されているからといってこのエクスプレッションが正しいわけではありません。
  • では逆に1次元から2次元へピック・ウィップをドラッグするとどうなるでしょうか。「回転」から「位置」にドラッグすると

position[0]

  • となりました。 [ 0 ] ←これは何でしょう?

インデックス(配列番号)

  • 配列には次元の数だけ変数が格納されています。配列名に続くカッコの数字でそこに含まれる値をだた1つ、指定することができます。

  • 例えば「位置」のプロパティにはxとy、2つの要素が含まれています。
    • 1つ目の要素「x」はposition配列の要素No.0なので position[0]
    • 2つ目の要素「y」は 同様に position[ 1 ] になります。
  • indexNo.jpgこの表記において、カッコに挟まれた数字を インデックスと呼びます。
  • インデックスは[ 0 ]から数え始めます。配列中の第1の要素は[ 0 ]で、第2の要素は[ 1 ]で指定します。これは非常に間違えやすいので注意してください。
  • 重要:配列のインデックスは「0」から始まる

この書き方を使うと「位置」を次のように書くことができます。

[ position[ 0 ] , position[ 1 ] ]

  • これは「位置」から第1と第2の値を取り出し、次に位置の配列にセットしています。

ただ単に'position'と記述したのと同じことです。