スクリプトの位置計算エラーについて
皆様こんにちは。After Effects用の「Salis LayerMaster」というスクリプトを開発中で、ヌルレイヤー生成時に以下のエラーが発生して苦戦しています:
エラー: Error: type object was found where a Number, array, or Property was required
このエラーは position.setValue() に無効な値(Error オブジェクトなど)が渡されている際に発生するものです。
スクリプトについて
Salis LayerMasterは、After Effectsでの作業効率を向上させるためのパネルUIスクリプトで:
- ヌルレイヤー、シェイプレイヤー、カメラ、ライト、テキストなどを簡単なボタンクリックで作成
- 3Dレイヤーのバウンディングボックス中心にヌルを配置する機能
- 複数レイヤーの中心にヌルを配置(Z軸も考慮可能)
- 各種レイヤー作成時の設定をカスタマイズ可能
- 多言語対応(日本語/英語)
エラー発生状況
このエラーは以下の状況で発生します:
- コンポジションで一つ以上のレイヤーを選択
- ヌルレイヤー作成ボタンをクリック
- 今回、3Dレイヤーがある場合のヌルの位置計算機能の開発中にエラーが発生しました。
試した解決策
- 位置値の厳密な検証: ensureValidPosition() 関数でどんな値が来ても正しい配列を返すよう改善
- 親子関係処理の改善: 一時的な親解除と復元を確実に行う try/finally ブロックの導入
- バウンディングボックス計算の改善: 3D座標を考慮した計算方法の修正
- エラー処理の強化: 位置計算のすべての経路で例外をキャッチして安全な値を返すよう実装
推定される原因
数日間のデバッグを経て、問題は以下のいずれかだと思われます:
- 複数の計算経路(getPreciseBoundingBoxCenter, getMultiLayerCenterWithZ)のいずれかでErrorオブジェクトが返され、それが適切に捕捉されていない
- 親子関係の一時的変更処理(親を一時的に解除して位置計算後、復元する)で何らかのタイミング問題
- After Effects内部のバウンディングボックス計算API(toCompメソッドなど)との相互作用の問題
コードを注意深く調査しましたが、エラーが引き続き発生しています。ヌルレイヤーやバウンディングボックス計算に関する同様の問題や解決策についてご存知の方がいらっしゃいましたら、アドバイスをいただきたいです。。。。
スクリプトのテスト方法
テスト・検証用にスクリプトとアイコンファイルをダウンロードいただけます。
アイコンフォルダとjsxファイルをスクリプトUIパネルフォルダに配置して使用してください。
※スクリプトは開発中バージョンです。テスト用のサンプルコンポジションとして、複数の3Dレイヤーを含むものをご用意いただき、スクリプトパネルにある「ヌルを作成するボタン」を、レイヤー上の複数のアイテムを選択した状態で押していただくとエラー再現が容易です。
どなたかこのエラーの根本原因や解決策について知見がございましたら、アドバイスいただけると大変助かります。よろしくお願いいたします。
