配列|arrays
(Animoplex Youtube Channelより)
配列 arraysとは
配列とは順序付けられた一連の数値を格納できる種類のオブジェクト。カンマで区切られ、かっこ[]で囲まれた数字のリストとして表される。
配列オブジェクトの個々の要素にアクセスするには、目的の要素を示すインデックス番号と角カッコを使用する。配列オブジェクトの要素には 「0」 から始まるインデックス(配列番号)が順番に割り当てられる。
例)「位置」プロパティ配列のインデックス
- position[0] は位置の X 座標
- position[1] は位置の Y 座標
- position[2] は位置の Z 座標
プロパティとその次元の例(ADOBEヘルプサイトより)
次元 | プロパティ |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
https://gumroad.com/l/animoplex-expressionsよりプロジェクトファイルが10ドル+αで購入できます。
インデックス割り当ては「0」から始まる
例1
a=[1,2,3,4,5,6,7,8,9,10] のとき
a[0]=1となり、a[10]=9となる。
例2
オリジナルの3次元位置のvalue(エクスプレッションを含むプロパティの現在時間の値)が[960,540,0]のとき、
transform.positon[1]
の戻り値は「540」となる。
ベクター vector
数値(numeric data)のみの配列をベクターと呼ぶことがある
配列からのインデックスの分離 Separating Array Indices 1:05~
indices:indexの複数形
たとえば作業をしていて、ひとつの次元だけ取り出して扱いたいことがある。
例
いま、以下のGIFのような一定のスピードでロケットが左から右へ移動するアニメーションがある。これをロケットが星を避けてうごくようにしたい。
2つのレイヤーでアニメーションを制御していく。
- ロケットの親であるヌルレイヤー「Rocket Null」
- 空のシェイプレイヤー「Control」。[制御スライダー]エフェクト([エフェクト>エクスプレッション制御>スライダー制御)を適用して、エフェクト名を「Rocket Dodge」としている。 ※Dodgeは「避ける、かわす」の意。
- 「Rocket Null」レイヤー(ロケットの親)を選択し、ショートカット「P」で位置プロパティを表示。いまタイムラインの最初と最後にキーフレームが打ってあり、X値のみアニメートさせることで水平にロケットが移動するアニメーションが出来ていることが分かる。
- 「Rocket Null」レイヤーの[位置]にエクスプレッションを追加(Altキーを押しながらストップウォッチをクリック)
- エクスプレッションピックウィップで「Control」レイヤーのスライダー制御エフェクト「Rocket Dodge」の[スライダー]をターゲットにする。
- 「Rocket Null」の[位置]のエクスプレッション命令文が自動的に以下のように変化する。
temp = thisComp.layer(“Control”).effect(“Rocket Dodge”)(“スライダー”);
[temp, temp, temp]
tempは変数。何もない状態から変数が必要になったときに、AE側で「一時的temporaryな変数」ということでtempを使って命令文が作成される。
このままだと、ロケットのヌルの位置がスライダーの値に従って、X位置,Y位置,Z位置の全てが同じ値になる。
- 以下のように、書き換える。valueメソッドは「現在時間の値」を表すエクスプレッション。
rocPos = thisComp.layer(“Control”).effect(“Rocket Dodge”)(“スライダー”);
[value[0],value[1]+rocPos,value[2]]
これで、X位置とZ位置は元の水平アニメーションの値となり、Y位置のみ、元のアニメーションの値にスライダーの値を足した値となる。スライダーを動かすと、ロケットがY軸方向に移動することが分かる。
タイムラインパネルで[スライダー](Controlレイヤーのエフェクト・プロパティ)のキーフレームアニメーションを作成していく。
0F | 20F | 1:20F | 2:20F | 3:20F | 4:20F | |
スライダー | 0 | 0 | 171 | -81 | 180 | 0 |
[スライダー]に打ったキーフレームをすべて選択し、ショートカット「F9」でイージーイーズに。
多次元のインデックスの加法・減法 3:42~
多次元インデックスでの加法・減法は可能である。
たとえば、ある[位置]プロパティに、他の[位置]プロパティを足したい場合。
例
さきほどの命令文は、以下であった。
rocPos = thisComp.layer(“Control”).effect(“Rocket Dodge”)(“スライダー”);
[value[0],value[1]+rocPos,value[2]]
これを、視点を変えて、元のアニメーションの[位置]に、スライダーのアニメーションの[位置]を加えるとすると、以下のように変えられる。まったく同じ命令となる。+以降はX位置、Y位置までで、Z位置については省略している。
rocPos = thisComp.layer(“Control”).effect(“Rocket Dodge”)(“スライダー”);
value+[0,rocPos]
インデックスの乗算と省略について
乗算はひとつの値の場合のみ可能である。
[1,1]+[1,1]←可能。
[1,1]*[2,2]←不可能。
[1,1]*2←可能。
配列内で、インデックス番号の順番が、計算に必要なインデックスより遅い番号で「0」である場合は省略可能
[1,1,1,]+[1,1]
は
[1,1,1] +[1,1,0]
と同じ。