3ds Max オブジェクトでのアニメート可能なプロパティへのアクセス

名前付きプロパティ アクセスを使う代わりに、3ds Max オブジェクト値にインデックスを付けて配列のように扱い、トラック ビューでトラックとして表示できるオブジェクト内のアニメート可能プロパティにアクセスすることができます。

これにより、オブジェクト内のすべてのアニメート可能プロパティを反復するタスクや、リスト コントローラ内など、一意の名前を持たないサブコントローラにアクセスするタスクなどを単純化できます。

   

プロパティ

<maxwrapper_object>.numSubs : Integer, read-only 	 

オブジェクト内のアクセス可能な SubAnim、またはトラックの数を生成します。これは直接の子 subAnims の数であり、トラック ビュー内でまだ表示できないトラック(ノード上の可視性トラック、または FFD 内のアニメートされていない頂点など)が含まれることもあります。このプロパティは、どの MAXWrapper サブクラスに対しても機能します。

   

メソッド

getSubAnimName <maxwrapper_object> <index> [ asString:<Boolean> ]   

指定された MAXWrapper のインデックス付き subAnim の名前を返します。

オプションの asString キーワードが指定され、 true に設定されている場合、名前を文字列で返します。 false に設定されているか、指定されていない場合は、名前値を返します。

   

getSubAnimNames <maxwrapper_object> 

subAnim インデックス順で名前の配列を返します。

   

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() を使用して取得した名前です。

   

SubAnim クラス

MAXScript は SubAnim クラスを定義します。SubAnim クラスのインスタンスは、サブ アニメート可能に対して一般的な描写を提供します。3ds Max オブジェクト上でインデックス演算子を使用すると、必ず SubAnim インスタンスが返されます。

例:

$box01[3] -> SubAnim:Transform

通常、ノード内の 3 番目の SubAnim は変換トラックです。

   

プロパティ

<subAnim>.name : String, read-only 

トラックビューに表示されるトラック subAnim の名前を返します。

   

<subAnim>.parent : Node, read-only 

subAnim を実際に所有するオブジェクトは、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]

<node>[3] は、常に変換トラックであり、その中の 2 番目のトラックは常に回転トラックであるため、これは回転トラック SubAnim を生成します。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