AfterEffectsのエクスプレッションで、レイヤーごとに少しずつ処理を変えたい場合があると思います。その場合は、レイヤーをコピペをするだけで、レイヤー毎に違う動作をする処理が作れます。
具体的には、以下の2種類のどちらかの数値を使う例で説明していきます。
- レイヤーのインデックスを使用する
- レイヤー名末尾につけた数字を使用する
②はコピペで使える便利な関数も作りましたので、後ほど紹介します。
具体例
今回は、以下の処理をさせる場合を例に説明をしていきます。
- 位置 = [レイヤー番号 × 100, 540]
エクスプレッションを適用したレイヤーをコピペするだけで、以下のように設定が変わります。
- レイヤー1の位置 = [100, 540]
- レイヤー2の位置 = [200, 540]
- :
- レイヤー10の位置 = [1000, 540]
今回は、これを2つの種類で実現する方法を説明していきます。
①レイヤーインデックスを使用する
この方法は手軽な反面、レイヤー順序を入れ替えるとレイヤーインデックスが変わってしまうので注意が必要です。
処理イメージ
コンポジション内のレイヤー順序を表すのがレイヤーインデックスです。コンポジション一番上のレイヤーインデックスが1となります。
レイヤーインデックスを取得するには、エクスプレッションのindexを使用します。以下の動画の3番目がindexの説明です。
事前準備
① 新規コンポジションを作成(1920×1080)
② シェイプレイヤーを作成し、「楕円形」などの図形と「塗り」を追加し、レイヤー名を「layer0100」にします。
これで準備OKです。
処理内容
レイヤー「layer0100」の [トランスフォーム] – [位置] に以下のコードをコピペします。
[thisLayer.index * 100, 540];
このレイヤーを10回くらいコピペしてみてください。レイヤーの位置が変わります。
コンポジション一番上のレイヤーの位置が [100, 540]、2番目のレイヤーは[200, 540]になるはずです。
この方法は、コンポジション内の順序=レイヤーインデックスを計算に使っているので、順序が変わると、計算結果が変わってしまうので注意が必要です。
② ファイル名末尾の数字を使用する
この方法はレイヤーの順序に依存しないで動作するので、レイヤーインデックスよりも使いやすいです。ファイル名から数字を取り出す処理も作成してあるので、コピペで簡単に対応できます。
処理イメージ
ファイル名末尾の数字を切り出し、数値に変換して使用します。AfterEffectsでは、末尾が数字のレイヤーをコピペすると、レイヤー名の数字を自動的に1ずつ増やしてくれるので、これを利用します。
事前準備
① 新規コンポジションを作成(1920×1080)
② シェイプレイヤーを作成し、「楕円形」などの図形と「塗り」を追加し、レイヤー名を「layer0001」にします。
これで準備OKです。
処理内容
ファイル名の末尾の数字を切り出して数値に変換する関数を作りました。
AfterEffectsのエクスプレッション内で、時間計算など、同じ処理を何度もする場合もあると思います。 そんな時は、関数を使うと記述量を大幅に減らせる可能性があります。 この関数の使い方についてご紹介します。 関数と[…]
レイヤー「layer0001」の [トランスフォーム] – [位置] に以下のコードをコピペします。
//© 2021 COLORCODE-AE
//レイヤー名末尾の数字を数値として取得
function getNumericFromLayerName(nDigit){
var sLayerName = thisLayer.name;
var sNumeric = sLayerName.slice(-nDigit) ;
return parseInt(sNumeric, 10);
}
[getNumericFromLayerName(4) * 100, 540];
「layer0001」から数値の1を取得して、位置が[100, 540]になります。このレイヤーをコピペしてファイル名が「layer0002」となれば、数字の2を取得して位置が[200, 540]になります。コピペするたびに位置がずれていきます。
こちらの方法は、ファイル名を処理に使っているので、コンポジション内で順序を変えても影響しません。
※ 10進数なので、parseIntの第二引数は10が入っています。これを省略すると意図せぬ動作になる場合があるので、省略しないことをお勧めします。parseIntの詳細はことらをご覧ください。
関数の使い方
getNumericFromLayerNameには引数が一つあります。
- nDigit・・・切り出す数字の桁数を指定
例えば、「layer01」のように、数字が2桁だったら以下のように引数を2にします。
getNumericFromLayerName(2) * 10;
レイヤー名は任意の名前で問題ありません。
関数説明
getNumericFromLayerNameを実行すると以下のような処理をします。
- レイヤー名取得
- ファイル名末尾から指定文字数切り出し
- 数値に変更して返す
まとめ
今回紹介した方法をうまく使うと、大量のレイヤーを簡単にコントロールすることができるなど大幅な効率化が図れます。
今回はわかりやすいように簡単な例にしましたが、これと以下の記事にある条件分岐を組み合わせることで、より高度な処理ができますのでお試しください。
AfterEffectsで時間を指定して処理を変えたり、座標を指定して処理を変えるなど、状況に応じて処理を切り替えたい場合があると思います。 その場合は、if文やswitch文を使うことで簡単に実現できますので、具体的な方法をご紹介[…]