スクリプト オペレータのコードを記述するにあたり、注意しなければならない特殊な問題があります。この問題について以下に説明します。
Scripted Operator Editor の下部ペインでは、グローバル変数を保持するサブルーチンを記述できます。サブルーチンは、コードをコントロールするために使用できるヘルパ関数です。サブルーチンは、メイン アップデート ルーチンまたは他のサブルーチンから複数回呼び出すことができます。
しかし、速度と効率の理由から、スクリプト エンジンのインスタンスは言語ごとに 1 つしか用意せず、それがすべてのスクリプト オペレータに対して使用されます。これは、異なるオペレータの 2 つのサブルーチンまたは変数が同じ名前の場合、どちらが解析または最後に設定されても両方に使用されることを意味します。この問題は名前の競合と呼ばれ、更新が正しく行われなかったり、オペレータを破壊する場合があります。
問題を回避するには、名前の前に、スクリプト オペレータ作者のイニシャルあるいはオペレータ固有のプリフィックスなど、他のオペレータと区別するための識別子を追加するとよいでしょう。複数のオペレータの使用、シーンのマージ、あるいは他のユーザとのファイルの共有などを行う場合には特に重要です。たとえば、次のように記述します。
me_MyDeform_CalculateVals(i_par1, i_par2, o_par)
同一のシーン内で、さまざまなスクリプト言語のさまざまなスクリプト オペレータを記述することができます。しかし、同一スクリプト オペレータ内で使用できる言語は一言語のみです。特定のスクリプト オペレータの解析に使用される言語は、スクリプト オペレータを最初に作成した際に[設定](Preferences)ウィンドウの[スクリプト](Scripting)ページで設定した言語です。
エディタの下部ペインで、スクリプト オペレータに対してグローバルな変数を宣言できます。しかしこれらの変数が使用できるのは、スクリプト オペレータが呼び出されて出力接続が更新されるときに限られます。したがって、たとえば、これらの変数をエクスプレッションなどで使用することはできません。
さらに、名前が競合する問題が発生する場合があります。詳細については、「サブルーチン、変数、名前の競合」を参照してください。また呼び出しと呼び出しの間では変数値は維持されません。永続的なデータを使用する必要がある場合は、スクリプト オペレータ用にカスタムパラメータ(「新しい変数を追加する」を参照)を作成し、この変数を読み取り専用にします。読み取り専用のカスタム変数もスクリプト コマンドを通じて設定できます。
エクスプレッションと同様、スクリプト オペレータは同じオブジェクト上のコンストレイントより前に計算されます。スクリプト オペレータ内で被コンストレイント パラメータを使用すると、希望通りの結果が得られない場合があります。
たとえば、オブジェクトの位置に基づく向きをコントロールするスクリプト オペレータを記述する場合、オブジェクトにパス コンストレイントがあると、各フレームで位置が更新される前に向きが計算されるため、オペレータでは以前の値が使用されることになります。
希望の結果を得るためには、ヌルなどの中間オブジェクトをパスに拘束してから、オブジェクトの位置をヌルに拘束します。新しい方向を計算する際、オブジェクトの位置ではなくヌルの位置を使用します。
スクリプト オペレータを、キーあるいはエクスプレッションなど、他のアニメーションと結合できます。しかし、オペレータの入力接続と出力接続の両方に特定のパラメータを使用し、後でそのパラメータをアニメートすると、入力接続は現在のフレームで更新される前のファンクション カーブまたはエクスプレッションからパラメータの値を取得します。