【スクリプト】色々な配列の形一覧

まとめ

  • 「選択している〇〇はたいてい、ゼロ始まりの配列。
  • 「全ての〇〇はたいてい、1始まりの配列風オブジェクト。
  • どちらも読み込み専用なので、JavaScriptの配列メソッドを使って入れ替えなどはできない。あくまで「この要素を変数に入れて使います」というような指定に使う。

使いどころ

AEスクリプトにはゼロ始まりの配列の他、1始まりのものもあって、書いている最中に「あれ、どっちだっけな」となることは多いです。そんなときにお使いください。

配列

JavaScriptに準拠しているいわゆる配列。インデックスはゼロ始まり。

  • 各要素の指定の仕方は〇〇[index]。
  • 「選択している~」はたいていこれに含まれる。

■selection:プロジェクトパネル内の選択アイテム群。
上から順で各アイテムが入っている。

var mSel = app.project.selection;
for (var i = 0; i < mSel.length; i++) {
    mSel[i].name = "item" + i;
}

■selectedLayers:コンポ内の選択レイヤー群。
選択順で各レイヤーが入っている。

var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
for (var i = 0; i < mSls.length; i++) {
    mSls[i].name = "layer" + i;
}

■selectedProperties:コンポ内、あるいはレイヤー内の選択プロパティ群。
上から順で各プロパティが入っている。

var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mSps = mSl.selectedProperties;
for (var i = 0; i < mSps.length; i++) {
    mSps[i].name = "property" + i;
}

レイヤー.selectedPropertiesだと特定レイヤー内の選択プロパティ群。
コンポ.selectedPropertiesだとコンポ内のレイヤーをまたいだ選択プロパティ群。
後者の場合、入っているプロパティ順は選択レイヤー順かつプロパティは上から順となる。

selectedPropertiesの要素となっているプロパティを複製、移動、削除すると、selectedPropertiesやその要素を入れた変数はリンクが外れます。つまりその変数からはプロパティ操作ができなくなります。なので、これらの処理はスクリプトの一番最後に、インデックスなどを駆使して慎重に行ったほうがよいです。
*リンクが外れる範囲はレイヤー内プロパティなので、別レイヤーの『レイヤー.selectedProperties』や、『コンポ.selectedProperties』の要素の中で別レイヤーのプロパティを指しているものはリンクが保たれます。

Collection object

AE独自の配列風オブジェクト。インデックスは1始まり。

  • 各要素の指定の仕方は配列風に〇〇[index]。あるいはメソッドで〇〇の最後のs抜き(index)。
  • 総数を表すnum〇〇〇〇.lengthと数が一緒。
  • 「全ての~」はたいていこれに含まれる。

■items:プロジェクトパネル内の全アイテム。
要素指定:items[index] あるいは item(index)
総数:items.length あるいは numItems

var mItms = app.project.items;
for (var i = 1; i <= mItms.length; i++) {
    mItms[i].name = "item" + i;
}

『app.project.items』は、サブフォルダやサブフォルダ内アイテムも含む、全アイテム。
『app.project.フォルダアイテム.items』は特定フォルダ内の全アイテム。サブフォルダは含むが、サブフォルダ内のアイテムは含まない。

■layers:コンポ内の全レイヤー。
要素指定:layers[index] あるいは layer(index)
総数:layers.length あるいは numLayers

var mAi = app.project.activeItem;
var mLyrs = mAi.layers;
for (var i = 1; i <= mLyrs.length; i++) {
    mLyrs[i].name = "layer" + i;
}

■プロパティズは無い:コンポ内、あるいはレイヤー内、プロパティグループ内の全プロパティを指定するCollection objectは無い。なので、プロパティについては以下のものを使って指定する。
要素指定:property(index)
総数:numProperties

var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mEft = mSl.effect;
for (var i = 1; i <= mEft.numProperties; i++) {
    mEft.property(i).name = "property" + i;
}

おまけ:activeItem

app.project.activeItem:たいてい、アクティブタイムラインコンポを指定するときに使う。
たいていのAEスクリプトはアクティブタイムラインコンポを使うため、activeItemを記述する機会はかなり多い。
activeItemはタイムラインパネルがフォーカスされていればアクティブタイムラインコンポを表す。プロジェクトパネルがフォーカスされていればパネル内で選択されている『1つ』のアイテムを表す。
後者の場合つまり、コンポでなくとも何か1つプロジェクトパネルで選択していればそれを指す。プロジェクトパネル内で何かが複数選ばれていれば『無し』とみなし、nullが返ってくる。

出典:After Effects スクリプトリファレンス

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