ロールアウト句は、ロールアウト(ユーティリティはロールアウトの特別な形であるとみなされます)を定義します。次の基本的な 4 つの項目のいずれかになります。
ローカル変数、関数、または構造体の定義 は、スコープがロールアウトである変数、関数、および構造体です。これらのローカルはロールアウトの値が存在する限り存在します。ロールアウトの値は、新しい値がロールアウトの変数名に代入されるまで存在します。ローカル変数は、選択オブジェクトや生成したオブジェクトの配列など、ロールアウトに関連付けられた作業データの保存に特に便利です。ローカルの可視性、外部コードからのロールアウト ローカルへのアクセスについては、「ロールアウト コード内のローカル、関数、構造体、ユーザ インタフェース項目の可視性」および「外部コードからロールアウトのローカルおよび他の項目へのアクセス」を参照してください。
マウス ツールは、3ds Max のビューポートでのマウス クリックに従って一連のアクションを実行するために使用します。詳細は「スクリプト化されたマウス ツール」を参照してください。
イベント ハンドラは、特定のユーザ インタフェース コントロール項目に関連付けられた特殊な関数です。 イベント ハンドラでは、ユーザがユーザ インタフェース項目を操作したときに起動する処理を指定します。たとえば、ユーザがボタンを押したり、スピナーを調整した場合に、イベント ハンドラが呼び出されます。これらのユーザ アクションは名前付きイベントを生成し、ユーザ アクションが発生すると指定したオプションのイベント ハンドラが呼び出されます。たとえば、DoIt という名前のボタン を押した場合、on DoIt pressed イベント ハンドラ式が実行されます。
<rollout_clause> は、次のように定義されます。
<rollout_clause> ::= <local_variable_decl> | <local_function_decl> | <local_struct_decl> | <global_variable_decl> | <mousetool> | <user_interface_item> | <item_group> | <event_handler>
<local_variable_decl> 、 <global_variable_decl> 、 <local_function_decl> 、および <local_struct_decl> は、MAXScript 内のローカルおよびグローバル変数、ローカル関数、ローカル構造体の定義とまったく同義です。
<local_variable_decl> ::= local <decl> { , <decl> } <decl> ::= <name> [ = <expr> ] -- optional initial value
<global_variable_decl> ::= global <decl> { , <decl> } <decl> ::= <name> [ = <expr> ] -- optional initial value
<local_struct_decl> ::= struct <name> ( <member> { , <member> } ) <member> ::= ( <name> [ =<expr> ] | <local_function_decl> )
local numSelected global foo local numSelected = 0 fn onlyOneSelected = (selection.count == 1) struct parents (mother="", father="")
スクリプトを作成するときは、ローカル変数およびグローバル変数を明示的に宣言することをお勧めします。暗示的な宣言は簡易的に提供されるものであり、通常、リスナーでインタラクティブに作業する場合や短いスクリプトを作成する場合に使用します。長いスクリプトを作成する場合は、変数を明示的に宣言するとエラーを軽減し、コードが読みやすくなります。また、グローバル変数がどうしても必要な場合を除き、すべての変数をローカルとして宣言することをお勧めします。この理由については、「変数のスコープ」を参照してください。
<user_interface_item> では、個々のボタン、チェック ボックス、スピナー、またはその他のロールアウトに表示されるユーザ インタフェース コントロール項目を定義します。これらのユーザ インタフェース コントロール項目については、「ロールアウト ユーザ インタフェース コントロール」を参照してください。
<item_group> は、一連のユーザ インタフェース項目をロールアウトのラベルのついたボックス内に配置し、大きなロールアウトを意味のあるグループに整理するために使用します。
上記のスクリプトが生成するユーティリティ パネル ロールアウトは、次の図のようになります。
グループ ユーザ インタフェース項目を使用したゲーム ユーティリティのロールアウト
内部的には、グループは GroupStartControl クラスと GroupEndControl クラスの 2 つのコントロールとして実装され、グループ化されたユーザ インタフェースをカッコのように取り囲みます。
3ds Max 8 以降では、ロールアウトの .controls プロパティを使用してアクセスすれば、 .caption プロパティにアクセスして、これらを変更することができます。この機能は以前のバージョンにはなかったものです。
3ds Max 2010 以降では、ユーザ インタフェース コントロールのイベント ハンドラは、グループの本体に含めることができます。旧バージョンの 3ds Max では、イベント ハンドラをグループ内部に含めると、構文エラーが発生していました。
<event_handler> は、ユーティリティまたはロールアウトに対する特殊な関数定義ローカルで、ユーザがユーザ インタフェース項目を操作したときに処理を実行するために使用します。たとえば、イベント ハンドラはユーザによるボタンの操作、スピナーの調整、ユーティリティやロールアウトの起動/終了、ロールアウト フロータ ウィンドウのリサイズや移動の際に呼び出されます。これらのユーザ アクションは名前付きのイベントを生成し、アクションが発生するとそのイベントに設定されたイベント ハンドラが呼び出されます。イベント ハンドラを定義する構文を次に示します。
<item_name> には、このハンドラが結びついている項目の名前を指定します。 <event_name> には、処理するイベントのタイプを指定し、ハンドラにさまざまな値を渡すためにオプションの <argument> を使用します。指定できるイベントは、項目のタイプによって異なります。指定可能なイベントを次に示します。
各ユーザ インタフェース項目のタイプに対して使用できるイベントと渡される引数については、各タイプの説明で定義されています。詳細は、「ロールアウト ユーザ インタフェース コントロール」を参照してください。ユーティリティやロールアウトで使用できるイベントと渡される引数については、「ユーティリティおよびロールアウトのプロパティ、メソッド、およびイベント ハンドラ」を参照してください。
スクリプト化されたロールアウト内のイベント ハンドラ関数は、ハンドラをユーザ インタフェース項目のプロパティとして参照することでアクセスや呼び出しができます。イベント ハンドラ関数は、イベント名をサブプロパティ名として使用して、該当項目のサブプロパティとしてアクセスされます。たとえば、スプリプト化されたロールアウトに foo という名前のチェックボックス項目があり、 on foo changed イベント ハンドラを定義した場合は、次のようにイベント ハンドラを呼び出すことができます。
または、スプリプト ロールアウトに apply という名前のボタン項目があり、 on apply pressed イベント ハンドラを定義した場合は、次のようにイベント ハンドラを呼び出すことができます。
イベント ハンドラ関数は、項目のサブプロパティとしてアクセスできます。
例 |
変数 ApplyPressedEH に対する on apply pressed イベント ハンドラ関数値のコピーを保存します。イベント ハンドラ関数は、この方法でのみ読み込むことができます。このハンドラ関数を別のユーザ定義関数に設定することはできません。 |