名前付きプロパティ アクセスを使う代わりに、3ds Max オブジェクト値にインデックスを付けて配列のように扱い、トラック ビューでトラックとして表示できるオブジェクト内のアニメート可能プロパティにアクセスすることができます。
これにより、オブジェクト内のすべてのアニメート可能プロパティを反復するタスクや、リスト コントローラ内など、一意の名前を持たないサブコントローラにアクセスするタスクなどを単純化できます。
プロパティ
<maxwrapper_object>.numSubs : Integer, read-only
オブジェクト内のアクセス可能な SubAnim、またはトラックの数を生成します。これは直接の子 subAnims の数であり、トラック ビュー内でまだ表示できないトラック(ノード上の可視性トラック、または FFD 内のアニメートされていない頂点など)が含まれることもあります。このプロパティは、どの MAXWrapper サブクラスに対しても機能します。
メソッド
getSubAnimName <maxwrapper_object> <index> [asString:<bool>] [localizedName:<bool>]
指定された MAXWrapper のインデックス付き subAnim の名前を返します。
オプションの asString
キーワードが指定され、true
に設定されている場合、名前を文字列で返します。false
に設定されているか、指定されていない場合は、名前値を返します。
3ds Max 2022 の新機能:
localizedName
キーワード パラメータが true
(既定値)の場合、UI に表示される名前が返されます。それ以外の場合は、ローカライズされていない名前が返されます。
getSubAnimNames <maxwrapper_object> [localizedNames:<bool>]
subAnim インデックス順で名前の配列を返します。
3ds Max 2022 の新機能:
localizedNames
キーワード パラメータが true
(既定値)の場合、UI に表示される名前が返されます。それ以外の場合は、ローカライズされていない名前が返されます。
getSubAnim <maxwrapper_object> <index>
インデックスで指定された SubAnim を返します。次のインデックス演算子を参照してください。
演算子
<maxwrapper_object>[<index_number>|<subanim_name>]
指定されたインデックスまたは名前を持つ最初の subAnim を返します。インデックス オペレータ [<index_number>]
を任意の MAXWrapper オブジェクト(ノード、モディファイヤ、コントローラ、マテリアルなど)に適用できます。SubAnim にアクセスできます。
例:
for i in 1 to $foo.numSubs do print $foo[i] -- iterate them $bar.position.controller[3] -- third subAnim in a position list controller ffd_mod[i].value -- position of i'th FFD control point
インデックス演算子は読み込み専用なので、SubAnim を設定することはできません。
インデックスの代わりに、subanim 名を使うこともできます。これは、文字列や名前の値を生成する、任意の式です。3ds Max 4 より前のリリースでは、subAnim の位置でノードに入るには、変形 subanim に対してインデックス 3、位置 subanim に対して 1 を記憶しておく必要がありました。
$foo[3][1] -- position within transform within node
代わりに、次を使うことができます。
$foo[#transform][#position]
使用できる名前は、トラック ビューに表示されている名前、または関数 getSubAnimName()
や getSubAnimNames().
を使用して取得した名前です。
MAXScript は SubAnim
クラスを定義します。SubAnim クラスのインスタンスは、サブ アニメート可能に対して一般的な描写を提供します。3ds Max オブジェクト上でインデックス演算子を使用すると、必ず SubAnim インスタンスが返されます。
例:
$box01[3] -> SubAnim:Transform
通常、ノード内の 3 番目の SubAnim は変換トラックです。
プロパティ
<subAnim>.name : String, read-only
トラックビューに表示されるトラック subAnim の名前を返します。
<subAnim>.parent : Node, read-only
subAnim の真の所有者を返します。
また、MAXScript では特定の種類の subAnims を非表示にするため、それに含まれる subAnim を自動的に上位に上げることになります。
例:
s=sphere() sa = s.baseobject[1] --> SubAnim:Radius sa.parent --> ReferenceTarget:ParamBlock sa.index --> 1 --The actual owner of the Radius subAnim is the sphere's parameter block.
<subAnim>.index : Integer, read-only
subAnim のインデックスを返します。
<subAnim>.value : Value
トラック SubAnim の現在の値であり、<controller>.value
と同じです。適切な値が存在しない場合、またはトラックにコントローラがまだ割り当てられていない場合は、undefined
を返します。.value
プロパティは、現在の MAXScript 時間での値を生成します。この値に割り当てて、その時点でのトラックの値を設定することができます。
<subAnim>.controller : Controller
トラック SubAnim のコントローラです。コントローラがまだ割り当てられていない場合や、SubAnim がアニメート可能でない場合、undefined
を返します。コントローラの SubAnim の .controller
プロパティを割り当てることによって、新規コントローラをトラックに割り当てることができます。
<subAnim>.keys : KeyArray, read-only
そのトラックのキー配列を生成するか、キー可能でない場合やコントローラがまだ割り当てられていない場合は undefined
を返します。このプロパティは、読み込み専用です。
<subAnim>.isAnimated : Boolean, read-only
アニメートされたコントローラが存在する場合は、true
を生成します。このプロパティは、読み込み専用です。
<subAnim>.object : MAXWrapper, read-only
SubAnim オブジェクトを生成します。割り当てられていない場合は、undefined
を返します。このプロパティは、読み込み専用です。.object
プロパティは、親オブジェクトが決定したプロパティのタイプに応じて、どんな種類の MAXWrapper オブジェクトでも返すことができます。たとえば、<node>[1].object
は、可視性コントローラを返し、まだ割り当てられていない場合は undefined
を返します。<node>[2].object
は、ノードにバインドされたスペース ワープのバインドを含み、何もバインドされていない場合は undefined
です。<node>[3].object
は、変換コントローラです。<node>[4].object
はノードのオブジェクトであり、モディファイヤが存在する場合は修正されたオブジェクト、存在しない場合は基本オブジェクトです。<node>[5].object
は、ノードに割り当てられたマテリアルで、マテリアルが割り当てられていない場合は undefined
です。<node>[6].object
は イメージ モーション ブラー マルチプライア コントローラで、まだ割り当てられていない場合は undefined
です。
例
b = box() b[4].object -- returns a reference to the Box base object
<subAnim>.numSubs : Integer, read-only
SubAnim の直接の子の数です。
シーン ノード可視性トラックなどのコントローラをまだ割り当てられていない特定の subAnim の .value
、.numSubs
、.category
などの subAnim プロパティにアクセスすると、これらのプロパティは 0 などの null 値を返すか、該当する場合は undefined
を返します。
メソッド
getSubAnim <subAnim> <index>
インデックスで指定された SubAnim を返します。次のインデックス演算子を参照してください。
演算子
<subAnim>[<index_number>]
インデックスで指定された SubAnim を返します。SubAnim 自体の中にインデックスを付けることにより、ネストされた SubAnim (ネストされたトラック)全体を通して作業することができます。
例
$box01[3][2]
回転トラック SubAnim を生成します。
[3] は、常に変換トラックであり、その中の 2 番目のトラックは常に回転トラックであるためです。SubAnim にインデックスを付けると、常に別の SubAnim が生成されます。3ds Max SDK の SubAnim に慣れている場合は、MAXScript SubAnim が、トラック ビューに表示された構造を反映しながら、隠された SubAnim レベルから自動的に下降することに注意してください。
次のように基本オブジェクトにインデックスを付けると、基本オブジェクトのトラック ビュー パラメータで取得できます。
b=box()
getSubAnimNames b[4] -- returns #(#length, #width, #height, ...)
b[4][2].value -- returns current width value
i = 3
b[4][i].controller = float_list() -- assign height controller