カードを複製するたび、決めた間隔で次の場所に並ぶ。レイヤー番号を表す index を使うと、1枚ずつ位置を入力せず、横並びやグリッドを作れます。
今回は横一列の基本から、中身の違うカードを4列に並べる作例、列数・横間隔・縦間隔を数値で調整する方法へ進みます。最後に、カードごとの回転角を10度ずつずらす使い方も紹介します。
この記事で使用したAEプロジェクトを無料ダウンロードできます。ダウンロードは記事の最後から。
まずは完成形:複製したカードを自動で整列
index 自体にレイヤーを生成する機能はありません。式を入れたカードをCommand/Ctrl+Dで複製すると、そのレイヤーの順番に応じて配置が変わります。位置のキーフレームは不要です。
indexで何が便利になる?
同じ図形をたくさん増やすだけなら、シェイプのリピーターも便利です。今回の方法は、写真・文字・図形などの中身が違うカードを、個別レイヤーのまま並べたいときに向いています。配置式を共通にして、各カードの内容は別々に編集できます。
| やりたいこと | 今回の使い方 |
|---|---|
| カードを増やす | レイヤーを複製し、順番から位置を計算 |
| 4列を3列に変更 | 列数を変えて、行の折り返し位置を変更 |
| 余白をまとめて調整 | 横・縦の中心間隔を変更 |
| 角度を順番にずらす | 順番 × 角度差を回転へ設定 |
カード同士の衝突回避や、コンポジションの幅に合わせた自動縮小は含みません。列数や間隔を大きくしすぎると画面からはみ出すので、全体を見ながら調整します。
準備:STARTとカードを連続して並べる
| 項目 | 今回の条件 |
|---|---|
| 環境 | After Effects 26.5×89/macOS/JavaScriptエクスプレッションエンジン |
| コンポジション | 1280×720/30fps/6秒/8bpc |
| 基本カード | 130×80pxのプリコンポジション/アンカーは中心 |
| 実践カード | 150×92pxのプリコンポジション/アンカーは中心 |
| トランスフォーム | 2D/親とリンクなし/位置の次元分割なし |
| 外部素材・追加プラグイン | 不要。カードの文字と図形はAE内で作成 |
- 130×80のコンポジションを作り、背景の長方形と「CARD」の文字を配置します。名前はCARD_BASICなどにします。
- 1280×720のメインコンポジションへ、そのカードを1枚置きます。
- ヌルオブジェクトを追加し、レイヤー名を半角大文字でSTARTに変更します。
- STARTをカードのすぐ上に置きます。背景レイヤーはカード群の下、見出しなどはSTARTより上へ置きます。
- カードのアンカーポイントが中心にあることを確認し、カード全体の「位置」へ次の式を貼り付けます。
STARTは番号の基準で、親レイヤーではありません。ヌルの目のスイッチはオフで構いません。STARTという名前のレイヤーは、このコンポジション内に1つだけ用意してください。
コピー用コード1:横一列に並べる
var n = index - thisComp.layer("START").index - 1;
var gapX = 180;
[190 + n * gapX, 360];
貼り付け先は、カードレイヤー全体の「トランスフォーム」→「位置」です。ストップウォッチをOption/Alt+クリックして入力し、そのカードレイヤーを複製します。
index は、そのコンポジション内で上から数えたレイヤー番号です。index - thisComp.layer("START").index - 1 とすると、STARTの直下が0、その下が1、2…になります。
| STARTからの順番 n | X座標 | Y座標 |
|---|---|---|
| 0 | 190 | 360 |
| 1 | 370 | 360 |
| 2 | 550 | 360 |
| 3 | 730 | 360 |
| 4 | 910 | 360 |
| 5 | 1090 | 360 |
gapX = 180 はカード中心同士の距離です。幅130px・スケール100%なら、カード端同士の空きは180−130=50pxになります。端の余白そのものを指定する数値ではありません。
配布AEPのROW_BASICが基本のソースです。01_BASIC_ROWの動画では、説明を置くためソース全体を88%で表示しています。数値はROW_BASIC内を基準にしてください。
実践1:中身の違うカードを4列に並べる
var n = index - thisComp.layer("START").index - 1;
var cols = 4;
var gapX = 230;
var gapY = 145;
var origin = [295, 215];
var col = n % cols;
var row = Math.floor(n / cols);
origin + [col * gapX, row * gapY];
横並びの位置式を、このグリッド用コードへ置き換えます。今回はカード150×92px、4列×3行です。
| 変数 | 設定値・意味 |
|---|---|
| cols | 4列。1以上の整数で指定 |
| gapX | 横の中心間隔230px。カード端同士は80px |
| gapY | 縦の中心間隔145px。カード端同士は53px |
| origin | 先頭カードの中心[295, 215] |
| n % cols | 列の番号。4列なら0・1・2・3を繰り返す |
| Math.floor(n / cols) | 行の番号。小数点以下を切り捨てて折り返す |
- START直下のカードへグリッド式を設定します。
- カードレイヤーを12枚まで複製します。カード以外のレイヤーを、STARTとカード群の間やカード同士の間に挟まないようにします。
- カードの中身を別にする場合は、プロジェクトパネルでカードのプリコンポジション自体を複製し、内容を変更します。
- 差し替えたいカードレイヤーを選び、複製したプリコンポをOption/Alt+ドラッグして差し替えます。位置の式はそのレイヤーに残します。
タイムラインでプリコンポのレイヤーを複製しただけでは、中身のコンポジションは共有されます。1つの文字を変更してすべて変わった場合は、プロジェクトパネル側で別コンポジションに分けてください。配布例では6種類を用意し、各種類を2枚ずつ配置しています。

列数だけを変える:3列・4列・6列

グリッド用コードの cols を変えると、横に並ぶ枚数と行数が変わります。この比較では、変更点を見やすくするため、基本の4列作例とは原点と間隔を変えた比較専用ソースを使っています。3パターン間で変えているのは列数だけです。
列数を0にすると割り算や余りの計算が成立しません。直接コードへ書く場合は1以上の整数にします。次のスライダー版では、丸めと最小値の制限を式に入れています。
実践2:スライダーで横・縦の間隔をまとめて調整
- GRID_CARDS相当のコンポジションで、STARTを選びます。
- 「エフェクト」→「エクスプレッション制御」→「スライダー制御」を3つ追加します。
- エフェクト名を正確にColumns、Gap X、Gap Yへ変更します。
- 値をColumns=4、Gap X=190、Gap Y=110に設定します。
- すべてのカードレイヤーの位置式を、次のスライダー版へ置き換えます。
var ctrl = thisComp.layer("START");
var n = index - ctrl.index - 1;
var cols = Math.max(1, Math.round(ctrl.effect("Columns")(1)));
var gapX = ctrl.effect("Gap X")(1);
var gapY = ctrl.effect("Gap Y")(1);
var origin = [245, 230];
origin + [(n % cols) * gapX, Math.floor(n / cols) * gapY];
effect("Columns")(1) の(1)は、スライダー制御の最初のプロパティを参照する指定です。エフェクト名はコードと一致させてください。ヌルが非表示でもスライダーは参照できます。
この作例の原点は[245, 230]です。最初は横190/縦110、2秒で横240、4秒で縦150へ切り替えています。静止したグリッドを作るだけなら、スライダーへキーフレームを打つ必要はありません。

回転もずらせる? カードごとに10度ずつ変える
できます。カードレイヤー全体の「回転」へ、次の式を貼り付けます。位置の式はそのまま残します。
var n = index - thisComp.layer("START").index - 1;
var step = 10;
n * step;
step = 10 なら、START直下から0度・10度・20度・30度…になります。−10なら反対方向、0なら全カード0度です。各カードのアンカーポイントを中心へ揃えると、カード自身の中心で回転します。

カードの向きを変えることと、円周上へ配置することは別です。この回転式はカードの中心位置を動かしません。円周に並べたい場合は、位置の式にも半径とsin/cosを使う計算が必要になります。
配置がずれたときに見るところ
| 症状 | 確認すること |
|---|---|
| 先頭カードの番号が0にならない | START直下からカードを連続配置しているか |
| 途中から配置が飛ぶ | カード同士の間に、別のレイヤーを挟んでいないか |
| 順番が入れ替わった | indexは現在の並び順。レイヤーを並べ替えると配置先も変わる |
| 上に見出しを追加したら? | STARTより上なら、STARTとカードの番号が同時に増えるため相対番号は変わらない |
| 一部のカードだけ動かない | そのレイヤーにも位置式があるか、式が無効になっていないか |
| スライダー参照エラー | Columns/Gap X/Gap Yの名前と、貼り付けたコンポジションを確認 |
| 別のカードの中身も変わる | 同じプリコンポを共有していないか。内容を分ける場合はソース自体を複製 |
| 画面からはみ出す | 原点・列数・中心間隔・カードサイズを見直す |
indexは固定のIDではなく、レイヤーの現在の番号です。完成後も並び順を自由に変えたいなら、どのカードが何番の場所へ入るかを確認しながら整理してください。
作例プロジェクトをダウンロード
基本の横並び、4列のカード配置、間隔調整、列数・横間隔・回転の比較を含む編集用プロジェクトです。
| 項目 | 内容 |
|---|---|
| ファイル | pas-index-v1.0.zip/127.6KB/v1.0 |
| 内容 | 編集可能なAEP・はじめに.txt・コピー用コード |
| AE | 26.5×89で作成/JavaScriptエクスプレッションエンジン |
| フォント | Hiragino Sans W6・Arial Bold。フォント本体は同梱しません。ない場合は置換してください |
| 素材 | AE内の文字と図形。外部参照・追加プラグイン不要 |
| 利用条件 | 学習・個人制作での利用と改変は可。商用利用は個別相談 |
商用利用のご相談はお問い合わせへ。ほかの表現はAEエクスプレッション集から探せます。


コメント