今回はname.sliceとvalueAtTimeの解説を作らせていただきました。
name.sliceはレイヤー名にある数字を数値に変えるエクスプレッションです。
AEの特性でレイヤーを複製すると数字が増えていくのを利用しています。

もう一つはvalueAtTimeです。
こちらは前のレイヤーより時間を遅らせたり早めたりするために使っています。
Aレイヤーが動き出してからBレイヤーが何フレーム遅れて動き出すかって感じです。
エコーをエクスプレッションで作っているイメージに近いと思います。
エコーと違い遅らせるレイヤーを様々に変えることができます。
これにname.sliceを使って何フレーム遅らせるのかを自動で計算させています。

今回は位置とスライダー制御とタイムリマップにしか使っていませんが、
トランスフォームのプロパティに全部エクスプレッションをかいてあげると楽しいです(*´∀`*)
トランスフォームだけでなくエフェクトにも使うことができますので色々試してみてください。

サンプルではシェイプレイヤーのみで作っていますがコンポジション別にいくつも素材を用意しておけば、
タイムラインの交換したい素材を選択後にプロジェクトウィンドウから交換したい素材をAltを押しながらドラッグして持って行き、タイムラインの素材の上でドロップすると交換出来ます。
このやり方の参考にayatoさんのサイトで紹介されています。
3次元空間の表現のSTEP4です。

CS4で制作しているのでCS5以上の人は、
「スライダ」を「スライダー」に変える必要があります。
AfterEffects compZeroさん」で配布されているスクリプトを使えば簡単に変えることができます。
http://sites.google.com/site/annamillersclub/download

コピペ用

位置にコピペして使ってください。
CS4用

ns=name.slice(3,6);
st=thisComp.layer("ヌル制御").effect("ズレ")("スライダ");
sx=thisComp.layer("ヌル制御").effect("x軸")("スライダ").valueAtTime(time+(ns*st-st));
x=ns*sx-sx;
sy=thisComp.layer("ヌル制御").effect("y軸")("スライダ").valueAtTime(time+(ns*st-st));
y=ns*sy-sy;
sz=thisComp.layer("ヌル制御").effect("z軸")("スライダ").valueAtTime(time+(ns*st-st));
z=ns*sz-sz;
p=thisComp.layer("ヌル制御").transform.position.valueAtTime(time+(ns*st-st));
p+value+[x,y,z]

CS5用

ns=name.slice(3,6);
st=thisComp.layer("ヌル制御").effect("ズレ")("スライダー");
sx=thisComp.layer("ヌル制御").effect("x軸")("スライダー").valueAtTime(time+(ns*st-st));
x=ns*sx-sx;
sy=thisComp.layer("ヌル制御").effect("y軸")("スライダー").valueAtTime(time+(ns*st-st));
y=ns*sy-sy;
sz=thisComp.layer("ヌル制御").effect("z軸")("スライダー").valueAtTime(time+(ns*st-st));
z=ns*sz-sz;
p=thisComp.layer("ヌル制御").transform.position.valueAtTime(time+(ns*st-st));
p+value+[x,y,z]

aep
download

曲をお借りしたサイト
甘茶の音楽工房
http://amachamusic.chagasi.com/

[追記 2014/07/14]

※お詫びと訂正。今までname.slice()で戻って来る値は「数値」だと思っていました。
本当は「数値」ではなく「文字列」が戻り値みたいです。
例えば、

レイヤー名が「Light_001」で

ns = name.slice(6, 20);
a = 1 + ns;

とエクスプレッションを書いたとします。
この時の戻り値は文字列の「001」です。
上記の記述でいけば
「数値(1)」 + 「文字列(001)」

ってことになるので本来であれば計算ができずエラー(PHPなど他の言語では)となります。
ただしJavaScriptでは、比較演算子で数を表す文字列を比較しようとすると、
自動的に数値に変換された上で比較されるみたいです。

正式に書くのであれば「Number関数」を使って文字列を数値にして計算する必要があるみたいです。

ns = Number(name.slice(6, 20));
a = 1 + ns;

これだと
「数値(1)」 + 「数値(1)」
になります。
Number関数使わなくてもエクスプレッションなら出来るんですけどね(´・ω・`)
私は正解を貫くぜ!
って人はNumber関数使ってみてください。

コメントを残す

メールアドレスが公開されることはありません。


三 − = 0