【AEスクリプト】prompt()でかんたんにUIを作ってみよう

「aeスクリプトはやりたいけどUI作りまでたどり着かん」という方はぜひともprompt(“”,””)を試してみてください!
かんたんに入力欄ができるので楽しい!

prompt()を説明しますと、スクリプトに『var 〇〇 = prompt(“説明”,”入力”);』と書き、実行すると入力画面が出てきてくれます。さらに、〇〇には入力した文字が入ってくれるので、その○○を使って色々な処理ができるというわけです。

■例 選択レイヤーのリネーム

var mSl = app.project.activeItem.selectedLayers[0];
var mVal = prompt("Tittle","");
mSl.name = mVal;


まずは1行目で必要なものを用意します。選択レイヤーですね。
2行目で入力欄を表示させます。
いったんこの時点で入力が終わるまで3行目に行かない、ということです。
そして入力が終わるとmValにその入力値(文字)が入るので、
3行目で選択レイヤーの名前『name』に=でmValを入れ、リネーム完了というわけです。

*変数名はなんでもいいです。「mSlだと選択レイヤー感ないなあ」と思ったらselLayerでもよいですし、自由です!
prompt()で自由に入力ができるようになると、スクリプトが一気に楽しくなるのでオススメです!

prompt()を試していると起こりそうな問題

気軽に使えるprompt()ですが、試してみると「あれ、なんか動かない」とつまづくこともあります。それらのヒントを書き連ねておきます。

選択レイヤーじゃなく選択プロパティってどう書くの?

以下、よく使う選択〇〇の書き方です。
下にいくほど、上のものにつなげて書いているので、コピーするときは上のものも一緒にコピーしてください、

//今表示されているコンポジション
var mAi = app.project.activeItem;
//選択レイヤー(複数)
var mSls = mAi.selectedLayers;
//選択レイヤー(1つ)
var mSl = mAi.selectedLayers[0];
//選択プロパティ(複数)
var mSps = mSl.selectedProperties;
//選択プロパティ(1つ)
var mSp = mSl.selectedProperties[0];

選択プロパティにprompt()の入力値を入れても何も起こらない?

考えられるのは主に3つです。
1.プロパティには = で値を入れられない。
2.prompt()に入力された値が数字や配列ではなく文字と認識されている?

3.選択プロパティはselectedProperties[0]ではなく[1]になるときがある。

1.プロパティには = で値を入れられない。
aeの仕様で、プロパティには『〇〇.setValue( 値 )』で値を入れることになっています。
ただし、キーフレームがある場合は『〇〇.setValueAtTime( 時間,値 )』ですね。
時間にはapp.project.activeItem.timeと入れればインジケータのあるところにキーが打てます。
(先にvar mAi = app.project.activeItem;と書いてあれば、mAi.timeでよいです)

2.prompt()に入力された値が数字や配列ではなく文字と認識されている?
prompt()に入力された値は文字列という型です。型というのはデータの種類ですね。レイヤー名だと『文字列』、不透明度など1つの数値なら『数値』、位置など2つ以上のデータが[]でひとまとまりになっていれば『配列』などがあります。

aeスクリプトではこれらの自動変換機能があるため、文字列から数値に関しては問題である可能性は低いです。
しかし、文字列から配列へ自動変換はされないので、問題となっている可能性はあります。
以下、それぞれ明確に別の型にしたいときの例です。

文字列から数値

var mAi = app.project.activeItem;
var mSl = mAi.selectedLayers[0];
var mSp = mSl.selectedProperties[0];

var mVal = prompt("Tittle","");

//文字列から数値へ変換。
mVal = parseFloat(mVal);

//型が数値のもの(不透明度など)を選んでいれば値が変わる。
mSp.setValue( mVal );

parseFloat()を使って、文字列を数値に変換しています。

文字列から配列

var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers[0];
var mSp = mSl.selectedProperties[0];

var mVal = prompt("Tittle","");

//文字列から配列へ変換。
var mValAry = mVal.split(",");

for(var i = 0; i <mValAry.length ; i++){
    mValAry.splice(i,1, parseFloat(mValAry[i]) );
}

//型が配列のもの(位置など)を選んで、入力の区切り文字を,にしていれば値が変わる。
mSp.setValue( mValAry );

例えば『100,20』という文字を入力したとします。
まずsplit(“,”)を使い、入力された文字を , で分割して配列にします。この時点で配列への変換が成功しており、後のfor文は無くても動きます。
ただし、split(“,”)で作られる配列の中身はまだ、100と20という文字列で実は数値ではありません。なのでfor文内でsplice()を使い、「i番目から1つ抜いて、代わりにparseFloat()で数値に変換したものをいれる」という処理をしています。

3.選択プロパティはselectedProperties[0]ではなく[1]になるときがある。
試しに、何でもいいのでコンポジションにあるレイヤーにエフェクトを適用してみてください。
そしてコンポジションパネルにあるレイヤーのエフェクトパラメータを選択してみてください(エフェクトパネル内のものではありません)。すると――
そうなんです。実はその1個上のプロパティも自動選択されてしまっているんですね。これにより、selectedProperties[0]は選択したいプロパティの1個上のプロパティを指しています。選択したいプロパティはその次に入っているのでselectedProperties[1]なんですね。

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