index|複製したカードを自動で並べる、列数を変えられるグリッド配置

indexで複製したカードを4列に自動整列する作例入りサムネイル

カードを複製するたび、決めた間隔で次の場所に並ぶ。レイヤー番号を表す index を使うと、1枚ずつ位置を入力せず、横並びやグリッドを作れます。

今回は横一列の基本から、中身の違うカードを4列に並べる作例、列数・横間隔・縦間隔を数値で調整する方法へ進みます。最後に、カードごとの回転角を10度ずつずらす使い方も紹介します。

この記事で使用したAEプロジェクトを無料ダウンロードできます。ダウンロードは記事の最後から。

目次

まずは完成形:複製したカードを自動で整列

複製後の1枚・3枚・6枚を、不透明度のホールドキーで順に表示。位置は式で決まり、再生中は変わりません。 6秒・音声なし。再生ボタンで確認できます。

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内で作成
  1. 130×80のコンポジションを作り、背景の長方形と「CARD」の文字を配置します。名前はCARD_BASICなどにします。
  2. 1280×720のメインコンポジションへ、そのカードを1枚置きます。
  3. ヌルオブジェクトを追加し、レイヤー名を半角大文字でSTARTに変更します。
  4. STARTをカードのすぐ上に置きます。背景レイヤーはカード群の下、見出しなどはSTARTより上へ置きます。
  5. カードのアンカーポイントが中心にあることを確認し、カード全体の「位置」へ次の式を貼り付けます。

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からの順番 nX座標Y座標
0190360
1370360
2550360
3730360
4910360
51090360

gapX = 180 はカード中心同士の距離です。幅130px・スケール100%なら、カード端同士の空きは180−130=50pxになります。端の余白そのものを指定する数値ではありません。

配布AEPのROW_BASICが基本のソースです。01_BASIC_ROWの動画では、説明を置くためソース全体を88%で表示しています。数値はROW_BASIC内を基準にしてください。

実践1:中身の違うカードを4列に並べる

6種類のカードを2回ずつ使った12枚のグリッド。冒頭のフェードはソース全体の不透明度キーで付けています。 6秒・音声なし。再生ボタンで確認できます。
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行です。

変数設定値・意味
cols4列。1以上の整数で指定
gapX横の中心間隔230px。カード端同士は80px
gapY縦の中心間隔145px。カード端同士は53px
origin先頭カードの中心[295, 215]
n % cols列の番号。4列なら0・1・2・3を繰り返す
Math.floor(n / cols)行の番号。小数点以下を切り捨てて折り返す
  1. START直下のカードへグリッド式を設定します。
  2. カードレイヤーを12枚まで複製します。カード以外のレイヤーを、STARTとカード群の間やカード同士の間に挟まないようにします。
  3. カードの中身を別にする場合は、プロジェクトパネルでカードのプリコンポジション自体を複製し、内容を変更します。
  4. 差し替えたいカードレイヤーを選び、複製したプリコンポをOption/Alt+ドラッグして差し替えます。位置の式はそのレイヤーに残します。

タイムラインでプリコンポのレイヤーを複製しただけでは、中身のコンポジションは共有されます。1つの文字を変更してすべて変わった場合は、プロジェクトパネル側で別コンポジションに分けてください。配布例では6種類を用意し、各種類を2枚ずつ配置しています。

AEの実際のタイムライン。12枚のカードを個別レイヤーとして配置し、下に背景を置いた構成。
実際のAEタイムライン。画像はソース名表示で、各カードが個別のレイヤーになっています。式を入力するときはレイヤー全体の「位置」を開きます。

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

同じ12枚のカードを3列、4列、6列へ並べた比較。
同じ12枚・同じ原点[190, 200]・同じ中心間隔180×100pxで、列数だけを変更。画面内の左揃えの位置は同じです。

グリッド用コードの cols を変えると、横に並ぶ枚数と行数が変わります。この比較では、変更点を見やすくするため、基本の4列作例とは原点と間隔を変えた比較専用ソースを使っています。3パターン間で変えているのは列数だけです。

列数を0にすると割り算や余りの計算が成立しません。直接コードへ書く場合は1以上の整数にします。次のスライダー版では、丸めと最小値の制限を式に入れています。

実践2:スライダーで横・縦の間隔をまとめて調整

4列は固定。横間隔を190→240pxへ変更し、その後に縦間隔を110→150pxへ変更。設定変更は0・2・4秒のホールドキーです。 6秒・音声なし。再生ボタンで確認できます。
  1. GRID_CARDS相当のコンポジションで、STARTを選びます。
  2. 「エフェクト」→「エクスプレッション制御」→「スライダー制御」を3つ追加します。
  3. エフェクト名を正確にColumns、Gap X、Gap Yへ変更します。
  4. 値をColumns=4、Gap X=190、Gap Y=110に設定します。
  5. すべてのカードレイヤーの位置式を、次のスライダー版へ置き換えます。
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へ切り替えています。静止したグリッドを作るだけなら、スライダーへキーフレームを打つ必要はありません。

4列のカードで横間隔だけを170、210、250pxに変えた比較。
4列・原点[245, 215]・縦間隔145pxは固定。横の中心間隔だけを変えています。幅150pxのカードなので、端の空きは20・60・100pxです。

回転もずらせる? カードごとに10度ずつ変える

位置を横一列に保ち、Angle Stepを0→10→−10度へ切り替えた作例。 6秒・音声なし。再生ボタンで確認できます。

できます。カードレイヤー全体の「回転」へ、次の式を貼り付けます。位置の式はそのまま残します。

var n = index - thisComp.layer("START").index - 1;
var step = 10;
n * step;

step = 10 なら、START直下から0度・10度・20度・30度…になります。−10なら反対方向、0なら全カード0度です。各カードのアンカーポイントを中心へ揃えると、カード自身の中心で回転します。

同じ横並びの5枚で、回転角の差を0度、10度、−10度に変えた比較。
カードの位置は同じ。1枚ごとの角度差だけを変えています。配布例ではstepの代わりにSTARTのAngle Stepスライダーを参照し、0・2・4秒で切り替えています。

カードの向きを変えることと、円周上へ配置することは別です。この回転式はカードの中心位置を動かしません。円周に並べたい場合は、位置の式にも半径と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・コピー用コード
AE26.5×89で作成/JavaScriptエクスプレッションエンジン
フォントHiragino Sans W6・Arial Bold。フォント本体は同梱しません。ない場合は置換してください
素材AE内の文字と図形。外部参照・追加プラグイン不要
利用条件学習・個人制作での利用と改変は可。商用利用は個別相談

商用利用のご相談はお問い合わせへ。ほかの表現はAEエクスプレッション集から探せます。

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

この記事を書いた人

フリーランスとしてPASを運営し、モーションデザインや映像制作を中心に活動しています。

映像をつくることだけでなく、情報をどう捉え、どう組み替え、どう伝えるかという「編集」に関心があります。

また、越境学習に関わる現場にも参加し、対話や問いを通じた学びの場づくりにも取り組んでいます。

コメント

コメントする

目次