スクリプト コントローラの使用方法は、式コントローラに似ています。[スクリプト コントローラ](Script Controller)ダイアログ ボックスで、コントローラ値を計算するためのスクリプトを入力します。
3ds Max では、次のスクリプト コントローラを使用できます。
各種スクリプト コントローラの主な違いは、割り当てられるアニメーション トラックの種類が異なるという点です。たとえば、変換スクリプト コントローラは変換トラックに、位置スクリプト コントローラは位置トラックに割り当てることができます。位置コントローラが XYZ 位置コントローラの場合は、各位置トラック(位置 X、Y、Z)の一部またはすべてに実数スクリプト コントローラを割り当てることができます。
スクリプト コントローラの主な特長は次のとおりです。
スクリプト言語の詳細は、『MAXScript ヘルプ』を参照してください。
変換スクリプト コントローラでは、位置/回転/スケール(PRS)コントローラの全情報が 1 つのスクリプト値に含まれています。位置、回転、スケールの 3 つのトラックを個別に管理するのではなく、1 つのスクリプト コントローラ ダイアログ ボックスから同時に 3 つの値すべてにアクセスできます。変換値をスクリプトで定義するため、すばやくアニメートできます。
コントローラのスクリプト値は matrix3 値です。matrix3 値とは、4x3 3D の変換配列です。詳細は、『MAXScript ヘルプ』の「Matrix3 値」トピックを参照してください。
3ds Max は[スクリプト](Script)編集ボックスに入力されたテキストを MAXScript ブロック式の本体として解釈します。 入力できる式の数や行数には、特に制約はありません。入力した式は順次評価されます。入力した式は順次評価されます。最後の式の値がコントローラ値になります。この値は、コントローラのデータ型と一致しなければなりません。たとえば、実数コントローラには実数値、位置コントローラには Point3 値、回転コントローラには四元数値(クォータニオン)、変換には Matrix3 値を使用します。
入力したテキストは 1 つのブロック式内のスクリプトなので、スクリプト内のみで有効なローカル変数を宣言することができます。ローカル変数は一時的な変数で、一度評価されると無効になります。また、MAXScript で記述した他のスクリプトと共有するグローバル変数を宣言したり、他のスクリプトで宣言されたグローバル変数にアクセスすることも可能です。グローバル変数の値は、複数の評価にわたって維持されます。
3ds Max は常に、特定のアニメーション時間についてコントローラを評価します。たとえば、アニメーションの再生時やレンダリングの実行中には、評価基準として現在のタイム スライダやフレーム時間などが使用されます。スクリプト コントローラの場合、コントローラのスクリプト内で自動的な「at time」コンテキストを設定する際に、評価対象の時間を使用します。したがって、ユーザがアクセスするプロパティ(明示的な at time 式以外)は、いずれも現在のコントローラの評価時間に正確な値を設定します。つまり、スクリプトを記述する際には、特に実行時間を意識する必要はありません。評価時間は、MAXScript の標準変数(current Time)でチェックできます。また、その他の時間におけるシーンのプロパティ値を参照する場合は、通常の MAXScript プログラミングと同様に、スクリプト内で at time 式を使用します。
シーン内のノードまたはアニメーション トラックを参照する必要がある場合は、スクリプト コントローラ変数ツールセットを使用して特定のノードまたはコントローラ トラックに割り当てる変数を作成することをお勧めします。この方法で変数を作成しておくと、後でシーンのオブジェクトの名前を変更する場合に、そのオブジェクトを使用しているスクリプトコントローラが保持されます。これは、変数がノードへのリンクを保持するためです。
この方法で作成しておかなければ、たとえばダイアログの[式](Expression)ウィンドウでノードを変数に手動で割り当てる場合、その特定のノードの名前を変更すると、そのノードへのリンクが失われます。
例: アニメーションの実行中に特定オブジェクトの位置をシーン内の他のすべてのオブジェクトの中心に維持するには:
新しい変数が[変数](Variables)リストに自動的に追加されます。
[トラック ビュー選択](Track View Pick)ダイアログ ボックスが開き、シーンのコンテンツが表示されます。
foo ノードが変数に割り当てられます。
local pos=[0,0,0]
for o in objects where o != foo do
pos += o.pos
pos /(objects.count - 1)
このスクリプトは、現在のオブジェクト(foo)を除くすべてのオブジェクトの平均位置を計算します。foo 以外のオブジェクトの座標をローカルのベクトル変数に順次累積し、最後の行で平均位置を計算しています。この平均位置がスクリプトの結果になります。
変換スクリプト コントローラを使用するには:
[スクリプト コントローラ](Script Controller)ダイアログ ボックスが開きます。
スクリプト コントローラを割り当てると、[スクリプト コントローラ](Script Controller)ダイアログ ボックスが自動的に開き、ここにスクリプトを入力します。この後、このダイアログ ボックスを開く場合は、[モーション](Motion)パネルか[トラック ビュー](Track)階層でトラックを右クリックし、[プロパティ](Properties)を選択するか、トラック ビューのツールバーで[プロパティ](Properties)ボタンをクリックします。
コントローラの使用可能なすべての変数のリストが表示されます。以下の定数値を持つ定義済みの変数は、すべてのスクリプト コントローラで使用可能で、削除または名前の変更はできません。