【After Effects】シェイプのサイズを自動で調整する
この記事では、After Effectsのシェイプのサイズをテキストの長さに連動させる方法をまとめています。
テキストの背景のシェイプレイヤー
テキストレイヤーの背景にシェイプレイヤーを配置することもあると思います。
しかし、テキストレイヤーの内容を変更したときに、シェイプレイヤーの幅や高さが足りなくなることがありました。
そこで、シェイプレイヤーのサイズをテキストレイヤーのサイズに連動させる方法を調べてみました。

エクスプレッション設定
シェイプレイヤーのサイズをテキストレイヤーのサイズに連動させるには、エクスプレッションを使う必要があります。

サイズ
まずはシェイプレイヤーの[コンテンツ]-[長方形]-[長方形パス]-[サイズ]のストップウォッチをAltキーを押しながらクリック。
エクスプレッションが入力できるようになるので、このような内容を設定します。
txt = thisComp.layer("タイトル");
r = txt.sourceRectAtTime(time, false);
padX = 40; // 左右余白
padY = 20; // 上下余白
[r.width + padX, r.height + padY]
テキストレイヤーを参照できるようにする
エクスプレッションの処理を1行ずつ確認してみます。
まずはtxt = thisComp.layer(“タイトル”);です。
これはテキストレイヤーを参照できるようにtxtという入れ物(変数)に入れる処理です。
layer(“レイヤー名”)のようにしてレイヤーを指定するので、今回の例では「タイトル」という名前のレイヤーを入れ物に入れています。
テキストレイヤーの矩形情報を取得する
次はr = txt.sourceRectAtTime(time, false);です。
これは変数txt(テキストレイヤー)の矩形情報をrという入れ物(変数)に入れる処理です。
「time, false」の部分は意味があるようですが今の段階では難しそうなので、とりあえずtimeとfalseを入れるという風に理解しておきます。
取得した矩形情報には下記のようなものがあります。
| width | 幅 |
| height | 高さ |
| left | レイヤー内の基準点から見た左端の位置 |
| top | レイヤー内の基準点から見た上端の位置 |
r.widthのように矩形情報を入れた変数名と値の名前を「.」で繋ぐと、値を参照することができます。
余白の設定
次はpadX = 40; と padY = 20; の部分です。
ここはコメントに書いてある通り、左右と上下の余白の設定で数値はピクセル数です。
この数値を変更すれば、余白を調整することができます。
幅と高さを設定する
最後は[r.width + padX, r.height + padY]です。
ここは[]の中にカンマで区切って幅と高さを指定しています。
[幅, 高さ]
この例ではr.width+padXでテキストレイヤーの幅に余白を付けて幅を設定、r.height+padYでテキストレイヤーの高さに余白を付けて設定しています。
位置
サイズにエクスプレッションを設定してから実際にテキストレイヤーの長さを変えると、シェイプレイヤーとの位置がズレてしまいます。

そのため、シェイプレイヤーの[コンテンツ]-[長方形]-[長方形パス]-[位置]にもエクスプレッションを設定します。
エクスプレッションには、このような内容を設定します。
txt = thisComp.layer("タイトル");
r = txt.sourceRectAtTime(time, false);
[r.left + r.width/2, r.top + r.height/2]
テキストレイヤーを参照できるようにする
1行目はサイズと同じです。
txt = thisComp.layer(“タイトル”);で、テキストレイヤーを参照できるようにtxtという入れ物(変数)に入れる処理です。
テキストレイヤーの矩形情報を取得する
2行目もサイズと同じです。
r = txt.sourceRectAtTime(time, false);で、変数txt(テキストレイヤー)の矩形情報をrという入れ物(変数)に入れる処理です。
位置を設定する
最後は[r.left + r.width/2, r.top + r.height/2]で位置を設定しています。
r.left + r.width/2
r.left + r.width/2は「左端(r.left)から幅の半分(r.width/2)だけ進んだ位置 = 横方向の中心」という考え方です。

r.top + r.height/2
r.top + r.height/2は「上端(r.top)から高さの半分(r.height/2)だけ進んだ位置 = 縦方向の中心」という考え方です。

シェイプレイヤーをテキストレイヤーに親子付する
エクスプレッションを設定しても、テキストレイヤーを移動させるとシェイプとずれてしまいました。

テキストを移動させる場合は、親とリンクでシェイプレイヤーをテキストレイヤーにリンクさせます。
これで、テキストレイヤーを移動させてもシェイプレイヤーも一緒に移動します。

まとめ
今回はテキストの長さに合わせて、シェイプのサイズを自動で調整する方法についてまとめました。
私の作業では今後も使うことがありそうなので、エクスプレッションの内容も含めて理解しておきたいと思います。
- シェイプレイヤーの[コンテンツ]-[長方形]-[長方形パス]の[サイズ]にエクスプレッションを設定して、テキストのサイズに合わせる
- シェイプレイヤーの[コンテンツ]-[長方形]-[長方形パス]の[位置]にエクスプレッションを設定して、テキストと位置を合わせる
- 親とリンクでシェイプレイヤーをテキストレイヤーにリンクさせる
