MAXKey 値の操作

> MAXKey 値 > MAXKey 値の操作

 

   

値とコレクション - クイック ナビゲーション

キーの .time プロパティを変更すると、コントローラ内の他のキーに対する相対的時間配列がずれる場合があります。この種のキー タイム操作がすべて完了したら、アニメーションを正しく実行するために、 sortKeys() 関数をコントローラで呼び出すか、関連付けられているMAXKeyArray を呼び出す必要があります

キーの値プロパティのクラスは、属するコントローラによって決まります。たとえば、 linear_float キーには実数 .value があり、 tcb_rotation キーにはクォータニオン .value があります。プロパティはすべて設定可能で、数値代入演算子やネストされたプロパティへのアクセスをサポートします。

次にいくつかの例を示します。

$foo.pos.keys[2].time += 20f -- change time of single key
$foo.pos.keys.time += 20f -- change time of all keys
$box1.uvw_map.center.keys[2].value.x += 20
for k in $baz.bend.angle.keys do k.value *= 1.1

キーに格納される実際の値は、コマンド パネルに表示される値、[トラック ビュー](Track View)に表示される値、キーの .value プロパティによって返される値、またはキーのコントローラが割り当てられているプロパティにアクセスしたときに返される値とは異なる場合があります。その代わり、値が「可視」になる前にスケール係数がキーの値に適用されます。たとえば、パーセントは 0 ~ 100 の範囲、回転角度は度、カラーは[0 ~ 255,0 ~ 255,0 ~ 255]で示されます。通常、スケールされていないキー値の場合、パーセントの範囲は 0 ~ 1、回転角度はラジアン、カラーは[0 ~ 1, 0 ~ 1, 0 ~ 1]になります。

各クラスのプロパティの説明では、スケール係数が存在する場合、それを各プロパティで確認できます。以下に、例として PArray クラスのプロパティを示します。

例:

<PArray>.X_Spin_Vector Float default: 1.0 -- animatable
<PArray>.Spin_Time_Variation Float default: 0.0 -- animatable, percentage
<PArray>.Spin_Phase Float default: 0.0 -- animatable, angle
<PArray>.viewPercent Float default: 10.0 -- percentage

.X_Spin_Vector プロパティでは、コントローラ キーにスケールは適用されていません。 .Spin_Time_Variation プロパティでは、コントローラ キーにパーセント スケールが適用されます(パーセントで表示され、割合として格納される)。 .Spin_Phase プロパティでは、コントローラ キーに角度スケールが適用されます(度で表示され、ラジアンとして格納される)。 .viewPercent プロパティは、パーセント スケール係数で内部的に格納されますが、このプロパティはアニメート可能でないため、このスケールは MAXScript からは見えません。

このスケールは、通常は MAXScript のプログラミング時に考慮する必要はありませんが、以下の 2 つの場合には考慮する必要があります。1 つは、スクリプト コントローラを使用する場合です。詳細は、「スクリプト コントローラ」を参照してください。

もう 1 つは、1 つのコントローラが複数のプロパティに対するコントローラとして適用される場合です。スケール処理はアニメート可能なコントローラではなく、アニメート可能なプロパティのアトリビュートであるため、1 つのコントローラを 異なるスケール係数を持つ複数のアニメート可能プロパティで共有する場合(このような状況はまれですが)、スケール係数を考慮しておかないと予期しない結果を招くことになります。次のスクリプトに例を示します。この例では、スケールされた 3 つの異なるプロパティが、同じコントローラを共有しています。

スクリプト:

obj=PArray()
cont=bezier_float()
obj.X_Spin_Vector.controller=cont
obj.Spin_Time_Variation.controller=cont
obj.Spin_Phase.controller=cont
obj.X_Spin_Vector=1
obj.X_Spin_Vector -- no scaling
obj.Spin_Time_Variation -- percentage
obj.Spin_Phase -- angle

出力:

$PArray:PArray03 @ [0,0,0] -- result line 1
Controller:Bezier_Float -- result line 2
Controller:Bezier_Float -- result line 3
Controller:Bezier_Float -- result line 4
Controller:Bezier_Float -- result line 5
1 -- result line 6
1.0 -- result line 7, unscaled
100.0 -- result line 8, percentage scaled, 1 = 100%
57.2958 -- result line 9, angle scaled, 
1 radian = 57.2958 degrees 

異なるスケール係数を持つ複数のプロパティに 1 つのコントローラを割り当てる場合は、正しいアニメート可能プロパティを通して .value プロパティへアクセスするように注意してください。これにより、アクセス処理用のスケール コンテキストが用意されます。