子のスケール、回転が変化しない親子レイヤーは、実はエクスプレッション1行で実現可能です。
まずはレイヤーを好きに配置して親子にするか、親子にしてしまっているレイヤーを用意します。
たいてい、親はコントローラーとして使うのでヌルがよいです。
子レイヤーの『親とリンク』の項目を『なし』にします。その際、Altを押しながら行うことで、子の位置パラメータが親子関係のときのままになります。
変な場所へ移動してしまいますが、問題なしです。
子レイヤーの位置パラメータに以下のエクスプレッションを適用してください。
thisComp.layer("親レイヤーの名前").toWorld(value);
*2Dでしか使わない場合はtoWorldの代わりにtoCompでも大丈夫です。
以上です!これだけで、子のスケール、回転が自由になります。位置パラメータもエクスプレッションがついてはいますが、動かすことが可能です。
使いどころ
インデックス系エクスプレッションをかんたんに3D対応化で紹介した方法では、自由に配置したレイヤーのコントローラーが作れないので、「いい感じに配置したレイヤーを1つのヌルで動かしたい」というときにお使いください。
複数レイヤーを処理する場合も、スクリプトを使わず、比較的かんたんにできます。
- Altを押しながらの親子リンク外しは複数レイヤー一括でできる。
- 子レイヤーの1つに上記エクスプレッションを適用。名前部分を親の名前にする。
- その位置パラメータを右クリックで『エクスプレッションのみをコピー』する。
- その他全ての子レイヤーを選んでペースト。
元に戻すには以下の処理をします。
- エクスプレッションを消す。
- Altを押しながら親子関係にする。
*このエクスプレッションが有効なのは1層の親子関係のみです。多層の親子関係に全てこの処理をした場合、それぞれに追従はしますが、元のものとは違う位置関係になってしまうことに注意してください。
解説
かんたんに解説します。親子関係にしたときに子レイヤーの位置パラメータは謎の数値に変化します。これは親のレイヤー座標基準での位置に変換されたということです(座標変換についてはアンカーポイントで学ぶ座標系を参照ください)。この『親のレイヤー座標基準での今の位置』さえわかれば、親子関係を外しても『親レイヤー.toWorld(親のレイヤー座標基準での今の位置)』でグローバル座標に変換、再び同じ位置に配置できる、ということです。
その『親のレイヤー座標基準での今の位置』を得るために、いったん親子にして、Altを押しながら外すことで『親子関係が外れていながら、valueに入っているのは親のレイヤー座標基準での位置』としたわけですね!だからtoWorldのカッコの中にはvalueをそのまま入れればいいだけです。