【AEスクリプト】書き方05 if文

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文については以上です。

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