スクリプト コントローラ

スクリプト コントローラの使用方法は、式コントローラに似ています。[スクリプト コントローラ](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)ウィンドウでノードを変数に手動で割り当てる場合、その特定のノードの名前を変更すると、そのノードへのリンクが失われます。

注: 外部参照シーンとオブジェクトを使用する場合は、対応するボタンを使用してノードとトラックを変数に割り当てることが特に重要です。

手順

例: アニメーションの実行中に特定オブジェクトの位置をシーン内の他のすべてのオブジェクトの中心に維持するには:

  1. 中央に維持するオブジェクトに foo という名前を付け、スクリプト コントローラをオブジェクトの位置トラックに割り当てます。
  2. [名前](Name)フィールドに foo と入力し、[作成](Create)をクリックします。

    新しい変数が[変数](Variables)リストに自動的に追加されます。

  3. 変数をハイライト表示して、[ノード割り当て](Assign Node)をクリックします。

    [トラック ビュー選択](Track View Pick)ダイアログ ボックスが開き、シーンのコンテンツが表示されます。

  4. [オブジェクト](Objects)階層を展開し、foo オブジェクトを見つけます。ハイライト表示して[OK]をクリックします。

    foo ノードが変数に割り当てられます。

  5. [スクリプト コントローラ](Script Controller)ダイアログ ボックスの[式](Expression)ウィンドウに次のスクリプトを入力します。

    local pos=[0,0,0]

    for o in objects where o != foo do

    pos += o.pos

    pos /(objects.count - 1)

    このスクリプトは、現在のオブジェクト(foo)を除くすべてのオブジェクトの平均位置を計算します。foo 以外のオブジェクトの座標をローカルのベクトル変数に順次累積し、最後の行で平均位置を計算しています。この平均位置がスクリプトの結果になります。

変換スクリプト コントローラを使用するには:

  1. オブジェクトを 選択します。
  2. 右クリックしてクアッド メニューを開きます。
  3. [変換](Transform)で[カーブ エディタ](Curve Editor)をクリックします。
  4. トラック ビューで選択したオブジェクトの変換トラックを選択します。
  5. [変換コントローラを割り当て](Assign Transform Controller)ダイアログ ボックスで[変換スクリプト](Transform Script)を選択し、[OK]ボタンをクリックします。

    [スクリプト コントローラ](Script Controller)ダイアログ ボックスが開きます。

  6. [スクリプト コントローラ](Script Controller)ダイアログ ボックスで matrix 値を編集し、[評価](Evaluate)ボタンをクリックします。

インタフェース

スクリプト コントローラを割り当てると、[スクリプト コントローラ](Script Controller)ダイアログ ボックスが自動的に開き、ここにスクリプトを入力します。この後、このダイアログ ボックスを開く場合は、[モーション](Motion)パネルか[トラック ビュー](Track)階層でトラックを右クリックし、[プロパティ](Properties)を選択するか、トラック ビューのツールバーで[プロパティ](Properties)ボタンをクリックします。

ヒント: ダイアログ ボックスのサイズを変更するには、ダイアログ ボックスの端またはコーナーにカーソルを置いてドラッグします。

変数グループを作成する

名前
ユーザ定義変数の名前を入力、編集します。
作成
変数を作成して、[変数](Variables)リストに追加します。
削除
ハイライト表示した変数を[変数](Variables)リストから削除します。[名前](Name)フィールドに変数名を入力して[削除](Delete)をクリックし、変数を削除することもできます。
名前変更
ハイライト表示した変数の名前を変更します。

[可変パラメータ](Variable Parameters)領域

ティック オフセット
現在の変数の時間オフセットをティック単位で指定します。スクリプトの評価時に、現在時間にティック オフセット値を加算した値に変数の値が設定されます。
注: 時間オフセットは、定数が割り当てられている変数には影響しません。
[変数](Variables)リスト

コントローラの使用可能なすべての変数のリストが表示されます。以下の定数値を持つ定義済みの変数は、すべてのスクリプト コントローラで使用可能で、削除または名前の変更はできません。

  • F フレーム単位の現在時間
  • NT 平均化された時間
  • S 秒単位の現在時間
  • T ティック単位の現在時間
定数を割り当て
ダイアログ ボックスが開き、ハイライトした変数に定数を設定できます。
  • [値式](Value expression) 任意の MAXScript 値または式(整数、浮動小数点数、配列など)を入力します。
  • [値式結果](Value expression result) 上記の式の結果が表示されます。
  • [評価](Evaluate) 現在時間の式を分析します。
  • [OK] 値式結果を現在の変数に割り当てます。
  • [キャンセル](Cancel) 現在の値式結果を無視してダイアログ ボックスを閉じます。
トラック割り当て
トラックをハイライト表示した変数に割り当てます。
コントローラを割り当て
コントローラをハイライト表示した変数に割り当てます。コントローラの値は、現在時間に変数のティック オフセットを加算した値です。
ノード割り当て
ノードをハイライト表示した変数に割り当てます。
[式](Expression)ウィンドウ
計算式が表示されます。このウィンドウで文字列を編集できます。
[説明](Description)ウィンドウ
このテキスト ウィンドウには、コントローラの機能や使用方法といったコメントを入力できます。
保存
スクリプトを MAXScript (.ms)テキスト ファイルに保存します。
ロード
MAXScript (.ms)テキスト ファイルからスクリプトをロードします。
デバッグ
スクリプト コントローラ デバッグ ウィンドウが開き、スクリプトで使用されたすべての変数の値が表示されます。
評価
スクリプトの式を評価します。スクリプトはタイム スライダの現在位置を基準に評価されます。
閉じる
コントローラのスクリプトをコンパイルし、エラーをチェックします。エラーが見つからない場合は、ダイアログ ボックスが閉じます。問題が見つかった場合は、式を現在のトラックの元の値に戻してダイアログ ボックスを閉じる([OK])、または式を再度編集する([キャンセル](Cancel))のいずれかの確認を求めるメッセージが表示されます。