if文はfor文よりかんたんです。文の読み方も、より日本語で理解しやすいですよね。この文は実際のスクリプト制作に使えるものです。
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mPos = mSl.position;
var mPosVal = mPos.value;
if (mPos.numKeys === 0) {
mPos.setValue(mPosVal + [100, 100]);
} else {
mPos.setValueAtTime(mAi.time, mPosVal + [100, 100]);
}
日本語訳です。
- 変数『mAi』 = タイムラインが出ているコンポジション。
- 変数『mSls』 = 選択レイヤー群。
- 変数『mSl』 = 選択レイヤー。
- 変数『mPos』 = その位置プロパティ。
- 変数『mPosVal』 = 位置プロパティの値。
- もしも位置プロパティのキーフレーム数がゼロであれば、
- 位置プロパティ値を、元の位置プロパティ値+[100,100]にする(キーフレームを打たない)。
- そうでなければ、
- 位置プロパティ値を、元の位置プロパティ値+[100,100]にする(インジケータのところに、キーフレームを打つ)。
STEP
使う変数。
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mPos = mSl.position;
var mPosVal = mPos.value;
今回メインで使うのは選択レイヤーの位置プロパティ(mPos)です。
位置プロパティ(〇〇.position)と位置情報(〇〇.position.value)は別物だということに注意してください。エクスプレッションでは〇〇.positionと書いておけば、どちらのことを指すかをAEが判断してくれます。が、スクリプトでは明確に書かねばなりません。
画面上で言えば、位置プロパティ(〇〇.position)はレイヤーの『トランスフォーム』の下にある『位置』と書かれているところです。位置情報(〇〇.position.value)はその横の[〇〇,○○]という具体的な値です。
STEP
場合分けをする。
if (mPos.numKeys === 0) {
mPos.setValue(mPosVal + [100, 100]);
} else {
mPos.setValueAtTime(mAi.time, mPosVal + [100, 100]);
}
意味は日本語訳の通りです。「もしも○○なら~、そうでないなら~」という形ですね。
valueは安易な誤操作を防ぐためなのか、直接、値を『=』で入れることができません。しかしその1つ上のプロパティが持つメソッドを使って2種類の代入が可能です。
- 1つ目はsetValue( 値 ):キーフレームなしで値を入れる。
- 2つ目はsetValueAtTime( 時間, 値 );:キーフレームありで値を入れる。
ただし、setValue()はもともとキーフレームがない場合のみ使うことが可能です。キーフレームがある場合にsetValue()を使ってしまうとエラーが出るので、このような分岐が必要なんですね。
if文については以上です。