Amazonで商品を見るセール会場へ

After Effects│valueAtTimeで時間をずらして動かすエクスプレッション|追いかける・遅れて動く

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秒前の値」になります。

別のレイヤーを遅れて追いかける

  1. 先頭で動かすレイヤーに、位置のキーフレームで動きを付ける(名前は「先頭」)
  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. いちばん上に、キーフレームで動かす先頭のレイヤーを置く
  2. その下に、上の式を書いたレイヤーを1つ作る
  3. 式を書いたレイヤーを 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) により時間を変えても選択を固定します。

レイヤー番号を変えると選ぶキーも変わる場合があります。

戻すときは追従側の式を無効にします。

原本の先頭キーを削除しないでください。

式の有無を比較するため、追従前の位置とレイヤーの並びも保存しておきます。

練習用エクスプレッション6本をダウンロードできます。

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で撮影・再検証した画面ではありません。
上のレイヤーの位置を1秒遅れで追従させるエクスプレッションの入力画面。
統合元の記事に掲載されていた画面です。現在のAEで撮影・再検証した画面ではありません。

統合元の参考出典:ワークスコーポレーション掲載ページ。今回の式は先頭レイヤーのガードを加えた記述です。AE本体の動作確認は、このページの検証範囲の記載を参照してください。

まとめ

  • valueAtTime(t) で、指定した秒の値を取り出せる
  • time – 0.2 と書くと、0.2秒前の値で遅れて追いかける
  • index – 1 を使うと、複製するだけで順番に遅れる
  • valueAtTime(0) や valueAtTime(inPoint) で最初の値を使える

参考:Adobe「Expression language reference」(2026年10月3日に公式資料を確認)。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

After Effectsのおすすめ書籍

必要なPCスペック

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次