スクリプト化されたカスタム アトリビュート

カスタム アトリビュート により、シーン内のオブジェクト、モディファイヤ、またはマテリアルに、補足的なパラメータを作成して割り当てることができます。これは、ゲームや他のオブジェクト固有のデータの場合に便利です。

MAXScript は、これらのカスタム アトリビュートを定義してシーン内のオブジェクトに追加する手段、およびこれらのアトリビュートにアクセスするためのユーザ インタフェース ロールアップを定義する手段を提供しています。

カスタム アトリビュートのトピック:

カスタム アトリビュートの追加

グローバルおよびプライベート カスタム アトリビュートの定義

カスタム アトリビュート管理関数

カスタム アトリビュートのアトリビュート定義値

カスタム アトリビュートの仮想配列へのアクセス

マテリアルとテクスチャ マップのカスタム アトリビュート

アトリビュート定義

アトリビュートは「 アトリビュート定義 」を介してオブジェクトに追加できます。これはMAXScript の構文で、スクリプト プラグイン定義に似ています。ただし、新しいプラグイン クラスを追加するのではなく、構築された定義を使って、カスタム アトリビュートとロールアップ ユーザ インタフェースを任意の数のオブジェクトに追加します。この追加は、新しい特殊関数を使っていつでも行うことができます。

注:面データごとにカスタム アトリビュートを使用することは できません 。面データ チャネルはユーザ定義タイプのオブジェクトを保存し、MAXScript は MAXScript が認識するオブジェクト タイプ以外のオブジェクトは作成できません。

構文の形式は次のとおりです。

attributes <name> [version:n] [silentErrors:t/f] [initialRollupState:0xnnnnn] [remap:#(<old_param_names_array>, <new_param_names_array>)]
(
<locals>
<globals>
<parameters>
<rollouts>
<handlers>
)

備考

名前は定義用の記述名で、<name> か <string> のいずれかです。

gameDataCA = attributes "Game Data"
(
...
)
or
attributes gameData
(
...
)

アトリビュート ヘッダのキーワード パラメータおよびメイン句は、スクリプト プラグインの同じキーワード パラメータおよび句と、基本的には同じです。実際には「カスタム アトリビュート」は、アトリビュート定義本体内のパラメータ句で定義されたパラメータです。これらのユーザ インタフェースはロールアウト句によって定義され、カスタム アトリビュートを含むオブジェクトの選択時に、自動的にコマンド パネルおよびマテリアル エディタに表示されます。

この引数 initialRollupState は整数で、このうち 32 ビットは[作成](create)パネルと[修正](modify)パネルの両方のロールアウトのロールアップ状態を初期化するために使用されます。ただし、これら 2 つのパネルではセマンティクスが異なります。[作成](create)タブでロールアウトが作成される場合、ロールアウトの状態は常にこの値によって指定されたものになります。[修正](modify)タブでは、このタイプのオブジェクトが最初に修正されるときの状態はこの値で指定されたものですが、それ以降は直前に設定された状態が維持されます。この値のビットは、対応するロールアウトがロールアップされている (閉じられている) ことを示します。ゼロ ビットは最初のロールアウトに、1 つ目のビットは 2 番目のロールアウトにと、順に対応していきます。既定値の 0x7fffffff は、この値が上書きできないことをコマンド パネルが検出できるようにして、ロールアウトを現状維持するために使用されます。たとえば、値 0x07 の結果、最初の 3 つのロールアウトがロールアップされ、残りのロールアウトが開きます(2^2+2^1+2^0 = 4+2+1 = 7)。

次の例では、ゲーム レベル エディタで武器オブジェクトを設定する場合などに使用する、3 つの新しいアトリビュートを定義しています。そのアトリビュートとは、hitPoints、cost、sound で、オブジェクトのパラメータおよびユーザ インタフェースとして、ロールアウト内で定義されます。

weaponDataCA= attributes weaponData
(
parameters main rollout:params
(
hitPoints type:#float ui:hits default:10
cost type:#float ui:cost default:100
sound type:#string
)
 
rollout params "Weapon Parameters"
(
spinner hits "Hit Points" type: #float
spinner cost "Cost" type: #float
dropdownlist sound_dd "Sound" items:# ("boom","sparkle","zap","fizzle")
 
on sound_dd selected i do sound = sound_dd.items [i]
)
)
注:

UI およびキーワードを使用したパラメータとロールアウト項目間の自動 UI 接続は、スクリプト プラグインでサポートされているものと同じです。アトリビュートのスクリプト記述は、パラメータ、ロールアウト設定、ハンドラのプログラミングという点で、プラグインのスクリプト記述と基本的に同様に扱うことができます。

3ds Max 5.1 以降、スクリプトされたカスタム アトリビュートはすべての MAXWrapper オブジェクト(基本オブジェクト、モディファイヤ、マテリアル、ノード、コントローラ、ルートノード、レンダリング効果など)に適用できるようになっています。

カスタム アトリビュートが現在サポートされている場所は、マテリアル エディタとコマンド パネルだけなので、基本オブジェクト、モディファイヤ、およびマテリアルのカスタム アトリビュートに関連するロールアウトのみを表示することができます。

カスタム アトリビュート再定義時のパラメータの再マップ

オプションの remap : キーワードによって、既存の定義を更新するときに、定義内のパラメータ名を変更できます。スクリプト プラグインでも使用できます。

このキーワードは 2 要素配列を引数にとります。それぞれの要素には、文字列リテラルまたは名前値の配列が含まれます。2 つの配列のサイズは同じにする必要があります。

最初の配列内の名前は既存のパラメータ名で、2 番目の配列内の名前は新しいパラメータ名になります。既存のプラグイン インスタンスの移行中にパラメータ名が読み込まれるため、パラメータ名は最初の配列内で検索されます。名前が見つかった場合、このパラメータに関連するデータは、2 番目の配列内の対応する場所にあるパラメータ名に移されます。パラメータ名が最初の配列内で見つからなかった場合、パラメータ名は再マップされません。2 番目の配列内のパラメータ名が、新しい定義のパラメータ名に一致しない場合、このパラメータ データは、新しい定義には移されません。

CAT_DEF = attributes Custom_Attributes
Redefine:CAT_CurrentDef
remap: # (# ("Param1"),# ("Param9"))
(
Parameters main rollout:params
(
'Param9' Type:# float UI:'Param9' Default:0.0
'Param2' Type:# float UI:'Param2' Default:0.0
)
Rollout Params "Custom Attributes"
(
spinner 'Param9' "Param9" Width:160 Height:16 Align: # Center Type: # float Range:[0,100,0]
spinner 'Param2' "Param2" Width:160 Height:16 Align: # Center Type: # float Range:[0,100,0]
)
)
CustAttributes.add CAT_TargetObject CAT_DEF #Unique BaseObject : false

これにより、パラメータ Param1 に関連するデータは、既存のインスタンスのパラメータ Param9 に移されます。

次のトピック:

MSCustAttribDef クラス

関連事項