valueAtTime は、プロパティの「指定した時間の値」を取り出すエクスプレッションです。
今より少し前の値を使えば、別のレイヤーの動きを遅れて追いかける動きが作れます。
- 基本:先頭のレイヤーの位置.valueAtTime(time – 0.2)
- 複製するだけで順番に遅れる:index を使って1つ上のレイヤーを追いかける
- 最初の値を使う:valueAtTime(0)
- キーフレームも他の式もなく、値を固定したプロパティでは時間をずらしても変わらない
この記事は、Adobe公式の「Expression language reference」の説明(2026年10月3日に公式資料を確認)にもとづいています。
After Effectsの画面での再現は含まず、公式の説明どおりに組み立てた式を紹介します。
valueAtTimeの書き方
valueAtTime(t)t は秒で指定します。
time はいまの時間なので、time – 0.2 と書くと「0.2秒前の値」になります。
別のレイヤーを遅れて追いかける
- 先頭で動かすレイヤーに、位置のキーフレームで動きを付ける(名前は「先頭」)
- 追いかけるレイヤーの「位置」に次の式を書く
var leader = thisComp.layer("先頭");
var delay = 0.2; // 遅らせる秒数
leader.transform.position.valueAtTime(time - delay);追いかけるレイヤーは、先頭のレイヤーが0.2秒前にいた場所にいつもいます。
この式の貼付先は追従側の「位置」です。回転や不透明度へ使う場合は、参照元の transform.position も対応するプロパティに変更します。先頭自身には貼らず、同じ親・次元のレイヤーで試します。
位置をずらして並べる
同じ場所に重なると1つに見えるので、少しずらしたいときは足し算をします。
var leader = thisComp.layer("先頭");
var pos = leader.transform.position.valueAtTime(time - 0.2);
pos.length == 3 ? [pos[0], pos[1] + 80, pos[2]] : [pos[0], pos[1] + 80];横を変えず、下に80ピクセルずらします。参照元が3DならZ値をそのまま返します。貼付先も参照元と同じ2D/3Dにし、「次元に分割」したX位置・Y位置には配列を返すこの式を貼りません。
複製するだけで順番に遅れさせる
たくさんのレイヤーを、少しずつ遅れて動かしたいときの書き方です。
var result = value;
if (index > 1) {
var above = thisComp.layer(index - 1);
result = above.transform.position.valueAtTime(time - 0.1);
}
result;index は、そのレイヤーがタイムラインの上から何番目かを表す数です。
index – 1 は「1つ上のレイヤー」なので、それぞれが1つ上のレイヤーを0.1秒遅れで追いかけます。
- いちばん上に、キーフレームで動かす先頭のレイヤーを置く
- その下に、上の式を書いたレイヤーを1つ作る
- 式を書いたレイヤーを Ctrl+D(Macは Command+D)で複製していく
複製するたびに、1つ前のレイヤーからさらに0.1秒遅れて動きます。
先頭のレイヤーより上にほかのレイヤーを置くと、順番が変わって追いかける相手も変わるので注意します。
指定時刻の値を使う
valueAtTime(0)0秒のときの値を返すので、動きの途中でも「最初の位置」を基準にできます。
レイヤーが始まった時間の値を使いたいときは、inPoint を使います。
valueAtTime(inPoint)キーフレームの値をランダムに選ぶ
random(4) は整数のキー番号ではなく、0以上4未満の時刻を返します。途中の時刻ではキーフレーム間の補間値を取得する場合があります。キーに保存した値を1つ選んで固定するには、次の式を使います。
var result = value;
if (numKeys > 0) {
seedRandom(index, true);
var n = Math.min(numKeys, Math.floor(random(numKeys)) + 1);
result = key(n).value;
}
result;うまくいかないとき
- 遅れない:先頭のレイヤーの動きがキーフレームで付いているかを見る(動いていないと同じ値が返る)
- エラーになる:レイヤー名が式と同じかを見る。index – 1 のときは、いちばん上のレイヤーに式を書いていないかを見る
- 最初だけ位置がおかしい:遅らせた時間が最初のキーフレームより前になる間は、最初のキーフレームの値のまま止まる
ほかのプロパティに合わせて値を変える書き方は、After Effectsのlinear・easeで値を変換するエクスプレッションで紹介しています。
追従とキー選択の練習
1920×1080の練習コンポジションに、同じ親を持つ2Dレイヤー「先頭」と追従側を作ります。
先頭の位置は0秒 [200, 540]、1秒 [1200, 540] の直線キーです。
追従側だけに0.2秒遅れる式を貼ると、1秒で [1000, 540]、80ピクセル下げる式では [1000, 620] を取得する計算になります。
AE本体の表示は未検証です。
上のレイヤーを追う式は、indexが1なら元の値を返します。
複製後にタイムラインの順番を変えると参照先も変わります。
1つ上のレイヤーと次元・親を揃えてから確認します。
キー選択の例では seedRandom(index, true) により時間を変えても選択を固定します。
レイヤー番号を変えると選ぶキーも変わる場合があります。
戻すときは追従側の式を無効にします。
原本の先頭キーを削除しないでください。
式の有無を比較するため、追従前の位置とレイヤーの並びも保存しておきます。
READMEの貼付先を確認し、1つずつ練習用プロパティに使います。
AE本体での動作確認は含みません。
上のレイヤーを1秒遅れで追う例と旧記事の画面
「上のレイヤーと同じ動きをN秒遅れで追従する」記事の内容を、このページに統合しました。上の複製手順で遅延を1秒にする場合は、追従側の「位置」に次の式を入力します。先頭はキーフレームで動かし、追従側と同じ親・2D/3Dの条件に揃えてください。
var result = value;
if (index > 1) {
result = thisComp.layer(index - 1).transform.position.valueAtTime(time - 1);
}
result;
追従側をCtrl+D(MacはCommand+D)で複製すると、それぞれが1つ上のレイヤーより1秒ずつ遅れます。並べ替えると参照先も変わります。最初のキーフレームより前を参照する間は、最初のキーの値になります。


統合元の参考出典:ワークスコーポレーション掲載ページ。今回の式は先頭レイヤーのガードを加えた記述です。AE本体の動作確認は、このページの検証範囲の記載を参照してください。
まとめ
- valueAtTime(t) で、指定した秒の値を取り出せる
- time – 0.2 と書くと、0.2秒前の値で遅れて追いかける
- index – 1 を使うと、複製するだけで順番に遅れる
- valueAtTime(0) や valueAtTime(inPoint) で最初の値を使える
参考:Adobe「Expression language reference」(2026年10月3日に公式資料を確認)。
