プロパティ
すべてのコントローラには、次のようなプロパティがあります。
<controller>.keys MAXKeyArray -- read-only, the controller’s key array
<controller>.value varies -- get or set the current controller value
keys
プロパティと value
プロパティは、独立コントローラ内の値とキーへのアクセスを提供します。MAXScript でアクセス可能なグローバル トラック コントローラを使用して作業をしている場合に便利です。キーフレーム処理ができないコントローラは、その keys
プロパティに対して空の KeyArray を返します。
value
プロパティは、現在時間とアニメート コンテキストの影響を受けるため、これを使用してコントローラを何度も評価したり、キーをサポートしているコントローラにキーフレームを埋め込むことができます。
コントローラがキーを基本とする場合のみ、コントローラの value
プロパティに値を割り当てることができます。唯一の例外として、PRS コントローラの value
プロパティに Matrix3 値を代入することができます。MAXScript によって、個々の位置、回転、スケールの値が Matrix3 に示されている値に自動的に割り当てられます。
イーズ カーブがコントローラに割り当てられている場合、次のコントローラ関連のサブプロパティを使用できます。
<controller>.Ease_Curve Float -- the controller’s ease curve value
マルチプライヤ カーブがコントローラに割り当てられている場合、次のコントローラ関連のサブプロパティを使用できます。
<controller>.Multiplier_Curve Float -- the controller’s multiplier curve value
イーズ カーブおよびマルチプライヤ カーブに関連したメソッドおよび注意事項については、「イーズ カーブとマルチプライヤ カーブ関数」を参照してください。
例:
globaltracks.float.mycontroller.value globaltracks.float.mycontroller.keys[2]
関連プロパティ
3ds Max オブジェクト内のアニメート可能プロパティを使用して、コントローラ関連のさまざまなサブ プロパティを参照できます。これら 2 つのオペレータは次のとおりです。
<property>.controller
プロパティのコントローラ。
<property>.track
.controller の同義語。
<property>.isAnimated
プロパティがアニメート処理されているかどうかを示すブール値。
<property>.keys
プロパティのコントローラのキー配列を取得します。
<property>.supportsKeys
読み込み専用。ブール値。コントローラがキーフレーム可能な場合は true を返します。
<property>.keyable
ブール値。コントローラがキーフレーム可能な場合は true、キー操作不能に設定されている場合は false を返します。
<property>.isHSV
読み込み専用。ブール値。コントローラの値が HSV カラーを表している場合は true を返します。
track
プロパティは、controller
の簡易同義語です。アニメート可能なプロパティにコントローラが割り当てられていない場合、isAnimated
プロパティは false
を返し、controller
、track
、および keys
プロパティは、undefined
を返します。
例:
$foo.pos.controller bend_mod1.angle.isAnimated $bar.taper.gizmo.scale.keys[2]
クラスのコンストラクタ関数を呼び出して、他の 3ds Max オブジェクトのようなコントローラを作成します。
例:
c = bezier_position()
次に、以下のようなアニメート可能なもののコントローラ プロパティに割り当てて、オブジェクトをアニメート可能プロパティに割り当てます。
例:
$foo.pos.controller = c $baz.bend.gizmo.rotation.controller = tcb_rotation() $box01.length = linear_float()
メソッド
getPointControllers {<editable_mesh_node> | <editable_spline_node>}
メッシュまたはスプラインの頂点に割り当てられるコントローラの配列を返します。頂点にコントローラが割り当てられていない場合、配列要素の値は undefined になります。編集可能スプラインの場合、各ノットは 3 つの頂点(イン ベクトル、ノット、アウト ベクトル)で構成されます。返されるコントローラ配列は、現在のコントローラの「スナップショット」です。頂点に対してコントローラが割り当てられるか、変更された場合、その変更は配列内には反映されません。頂点が追加または削除された場合、頂点数の変更を反映するような配列のサイズ変更は行われません。
getPointController <editable_mesh_node> <vertex_index_integer>
現在頂点に割り当てられているコントローラを返します。コントローラが割り当てられていない場合は undefined を返します。
getPointController <editable_spline_node> <spline_index_integer> <vertex_index_integer>
指定されたスプラインの指定された頂点のコントローラを返します。コントローラが割り当てられていない場合は、undefined を返します。各スプライン ノットは 3 つの頂点(イン ベクトル、ノット、アウト ベクトル)で構成されます。
コントローラをプロパティに適用すると、コントローラはフレーム 0 のプロパティ値を採用します。プロパティを割り当てる前にコントローラにキーがある場合は、すべてのキーはフレーム 0 のコントローラ値とプロパティ値の差異で調整されます。以下に例を示します。
スクリプト:
a=bezier_float () addnewkey a 0 addnewkey a 10 a.keys[1].value=10 a.keys[2].value=100 b=box() b.height b.height.controller=a b.height at time 10 b.height
出力
Controller:Bezier_Float-- result line 1 #Bezier Float key(1 @ 0f)-- result line 2 #Bezier Float key(2 @ 10f)-- result line 3 10-- result line 4, key value at time 0 100-- result line 5, key value at time 10 $Box:Box006 @ [0.000000,0.000000,0.000000]-- result line 6 25.0-- result line 7, default property value Controller:Bezier_Float-- result line 8 10.0-- result line 9, key value changed from 10 to 25 (delta= +15) 100.0-- result line 10, key value changed by delta = +15
1 つのコントローラが複数のオブジェクトのプロパティに割り当てられている場合、問題が発生することがあります。コントローラ内に実際に格納されている値は、必ずしもトラック ビューやコマンド パネルの値と同じではありません。また、MAXScript のプロパティ値にアクセスして返される値と異なる場合もあります。その理由は、MAXWrapper プロパティ定義の一部が、コントローラに格納された実際の値を読み取ったり設定するときに適用されるスケール値だからです。たとえば、多数のジオメトリ プリミティブに関連付けられている
slice_to
プロパティとslice_from
プロパティは度単位で表示されます。これらのプロパティに関連付けられているコントローラに保存される実際の値の単位はラジアンです。このスケール係数は maxwrapper プロパティの内部プロパティで、コントローラの内部プロパティではありません。3ds Max および MAXScript は、プロパティにアクセスするときに指定したスケール係数を自動的に適用するため、このスケールは通常、ユーザには見えません。異なるスケール係数を持つ 2 つのプロパティがコントローラに割り当てられた場合、コントローラの出力にどのスケール係数を適用するかが問題となります。MAXWrapper プロパティを通してコントローラの値にアクセスする場合、そのプロパティに関連付けられているスケール係数がコントローラの値に適用されます。MAXScript は、コントローラの値に最後に適用されたスケール係数を格納します。コントローラのvalue
プロパティまたはコントローラ内のキーのvalue
プロパティに直接アクセスする場合、MAXScript の内部に格納されたスケール係数が使用されます。これにより、コントローラのvalue
プロパティは、コントローラが最後にアクセスされた方法に基づいて、スクリプトの実行ごとに異なる値を返します。したがって、異なるスケール係数を持つ複数の MAXWrapper プロパティに対するコントローラのインスタンスを作成しないようにしてください。スケール係数が存在する場合、MAXWrapper クラスの解説にある各 MAXWrapper プロパティに対してスケール係数がリストされます。
displayControlDialog <controller> <string>
モーダル コントローラ ダイアログ ボックスを表示します (存在する場合)。文字列がダイアログ ボックスのタイトル バーに表示されます。コントローラがキーフレーム コントローラの場合、選択されたキーの[キー情報](key info)ダイアログ ボックスが表示されます。キーが選択されていない場合はダイアログ ボックスは表示されません。
clearControllerNewFlag <controller>
コントローラ用の MAXScript ラッパーの「new」フラグをクリアします。
このフラグが設定されている場合にコントローラにプロパティを割り当てると、コントローラの初期値はプロパティ値に設定されます。
コントローラのインスタンスを作成すると、フラグが設定されます。
通常は、コントローラがプロパティに割り当てられた後にクリアされます。
3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
isController <value>
値がコントローラをラップする場合は、true を返します。
キーフレーム処理の可能なコントローラは、時間およびキー関連関数をサポートしています。詳細は次のトピックを参照してください。