※記事に関しましてご注意下さい
こちらでは「対処法そのもの」よりも「そもそも何故その問題がおこるのか」を探るべく調査した内容になります。
実際の現場では具体的な解決策として様々な手段がとられますが、その根源は実は同じであることも多く、
そこを知っておくことでこれから未来に起こるトラブルも防ぎたい、心の準備をしておきたい、というメモになります。
あくまでも個人調査のメモです。間違い・勘違いが含まれている可能性もありますので予めご了承ください。
~ デフォルト名を参照した expression の怪 ~
起こる場面:
スライダー制御を expression で参照した場合など
調査のきっかけ
aftereffects で起こるトラブルの中に
作成時と異なる言語(英語・日本語)でファイルを開くと expression エラーが出る
というものがあります。
これについてはいろんなサイトにいろんな対応が書かれてあり、
thisComp.layer("A").effect("スライダー制御")("スライダー") // aftereffects 日本語
thisComp.layer("A").effect("Slider Control")("Slider") // aftereffects 英語
のように言語による記述の違いがあること、また
thisComp.layer("A").effect("ADBE Slider Control")(1)
のようにして共通化の書き方をするといいかも、などの情報があります。
今回はこの原因を潜って調べたメモです。
調査の結果
実はこれは根本に1つの仕様というか問題が潜んでいて、それは
「デフォルト名で作成した場合、言語によってその内容が変わってしまう」
※ デフォルト名で作成、とはユーザーがあえて名前を付けなかった場合
というもののようです。
問題が起こることを確認する方法
- 日本語モードで起動し、「スライダー制御」でエフェクトを作成し保存
- 英語モードで起動し、1) のデータを開き直す
- "Slider Control" に変わっている
問題が起こらないことを確認する方法
- 日本語モードで起動し、「スライダー制御 1」でエフェクトを作成し保存
- 英語モードで起動し、1) のデータを開き直す
- "スライダー制御 1" で残っている
運用上どう対処するべきか
thisComp.layer("A").effect("スライダー制御")("スライダー")
例としてこの ↑ 場面では
1.エフェクト名:effect("スライダー制御")
2.プロパティ名:("スライダー")
がそれぞれ名前を持っており、
1 はデフォルト名から変更が可能(「スライダー制御 1」や「横調整スライダー」など)
2 はリネーム不可(UI 的にも)なのでデフォルト名以外にはならない
となっています。
これを前提に実験してみたところ、
はじめから 「スライダー制御 1」のように名前を変更してあった場合
thisComp.layer("A").effect("スライダー制御 1")
までは英語モードでも問題なく動作しました。
ただ、2は変更不可のため同じこと(リネーム)ができません。
この場合はエクスプレッション制御がどれもパラメータを1つしか持たないことを踏まえて
("スライダー") と書かずに (1)
と書くことで名前のトラブルを回避できました。
対処法1
上の条件を組み合わせると
thisComp.layer("A").effect("スライダー制御 1")(1)
というデフォルト名を避けた書き方
であれば実は起動言語に依存せずに動作しました。
共通の書式(ADBE ~)ではだめなのか
いやいやそれよりも
thisComp.layer("A").effect("ADBE Slider Control")(1)
と書けばよいのでは、、、という方もいらっしゃると思います。(状況によっては可)
実はこの記述では避けられないパターンがあり、
エフェクト項目にスライダー制御を「複数」組み合わせた場合
に対応できないです。(その状況が無いフローの場合は問題がでない)
また、もし複数スライダー制御があった場合には
thisComp.layer("A").effect("ADBE Slider Control")
の記述では必ず最初のエフェクトにヒットしてしまうようです。
この場合も
thisComp.layer("A").effect("スライダー制御 1")(1)
thisComp.layer("A").effect("スライダー制御 2")(1)
であればそのまま動作します。
追記:
もちろん、aftereffects 内で敢えて同じエフェクト名にリネームした場合、つまり
スライダー制御 1
スライダー制御 1
スライダー制御 2
が同じレイヤーのエフェクトとして重複している場合、
最初のエフェクトにヒットしてしまい、場合によって想定外の動作になります。
※ここまでいってしまうとどの手段も同じで index 番号指定になってしまいそうです。
つづく。