エクスプレッションでプロパティを連動させてみよう

前回に続いて、エクスプレッション第2回目です。
今回は、「他のプロパティの値と連動して、プロパティの値を変化させる方法」を解説していきます。

同じ値に

あるプロパティ(Aとする)を他のプロパティ(Bとする)と同じ値にしたい場合は、Aの渦巻きをドラッグして、Bのプロパティにドロップするだけです。

thisComp.layer("Bのレイヤー名").transform.opacity;
逆の値に

同じ値にするだけでは用途が狭いので、次はBが不透明度100の時にAは0となるようなエクスプレッションにしてみます。
これは、100からBの不透明度を引けば出てくるので、100から先ほどのエクスプレッションをそのまま引けばOKです。

100 - thisComp.layer("Bのレイヤー名").transform.opacity;

回転プロパティで同様の動作をさせたい場合は、

thisComp.layer("Bのレイヤー名").transform.rotation * -1;

▲Bがx度右回転したら、Aはx度左回転(-x度右回転)

位置プロパティで同様の動作をさせたい場合は、

x = thisComp.layer("Bのレイヤー名").transform.position[0]*-1 + レイヤーの横幅;
y = thisComp.layer("Bのレイヤー名").transform.position[1]*-1 + レイヤーの縦幅;
[x, y];

▲レイヤーの中心を基準に、AはBが右に移動したら左に、下なら上に移動

遅れて同じ値に

今度は、Bの位置プロパティを1秒遅らせてAに適用してみましょう。Bを追跡するAという状態です。

このような場合には、指定した時間の値を取得してくれる『valueAtTime』を使います。

valueAtTime(値を取得したい時間);

今回のように他のプロパティの指定した時間の値を取得したい場合には、先程の方法を使ってvalueAtTimeの手前でそのプロパティを指定してやる必要があります。

thisComp.layer("Bのレイヤー名").transform.opacity.valueAtTime(値を取得したい時間);

今回の場合は、Bの一秒前の位置を取得したいので、

thisComp.layer("Bのレイヤー名").transform.opacity.valueAtTime(time - 1);

としましょう。