次の管理関数は custAttributes
構造体を通して使用できます。
custAttributes.count <obj> [BaseObject:<boolean>]
.add()
関数により追加された個々のスクリプト カスタム アトリビュート セット数のカウントを返します。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが代わりに動作します。false
の場合、ノードそのものがそこで動作します。
custAttributes.get <obj> (<index> | <attrib_def>)[BaseObject:<boolean>]
インデックスとして指定された、あるいはそれにより定義されるアトリビュート定義により指定された、カスタム アトリビュート セットを返します。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが動作します。false
の場合、ノードそのものがそこで動作します。3ds Max 5.1 より前のバージョンでは、基本オブジェクトが常に使用されていました。
custAttributes が返すカスタム アトリビュート セット値は、そのアトリビュート セット内のオブジェクトのカスタム パラメータに対する、事実上のホルダー値です。これらのパラメータ値は、アトリビュート セット値の単純なプロパティとして取得できます。
例
gp = custAttributes.get $ gameParams gp.hitPoints= 50
これは、オブジェクト上のカスタム アトリビュート パラメータに直接アクセスすることと同じです。
$.gameParams.hitPoints = 50
custAttributes.delete <obj_or_collection> (<index> | <attrib_def>) [baseObject:<boolean>]
オブジェクトから、あるいは指定したコレクション内のオブジェクトすべてから、特定のカスタム アトリビュート セットを削除します。削除されるセットは、インデックス番号、またはそれが定義するアトリビュート定義によって定義されます。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが動作します。false
の場合、ノードそのものがそこで動作します。3ds Max 5.1 より前のバージョンでは、基本オブジェクトが常に使用されていました。
custAttributes.makeUnique <obj> (<index> | <attrib_def>) [baseObject:<boolean>]
カスタム アトリビュート セットを保持するオブジェクトが特定のアトリビュート定義を共有する場合、選択したオブジェクトに定義の一意なコピーを持たせることができます。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが動作します。false
の場合、ノードそのものがそこで動作します。3ds Max 5.1 より前のバージョンでは、基本オブジェクトが常に使用されていました。
例
custAttributes.add $box* def1
次のようにして box01 を一意にします。
custAttributes.makeUnique $box01 def1
あるいは、これらすべてを一意にします。
custAttributes.makeUnique $box* def1
custAttributes.getDef (<obj> <index>) | <custAttrib> [baseObject:<boolean>]
オブジェクト内の与えられたカスタム アトリビュート セットのアトリビュート定義か、.get()
メソッドを使ってアクセスするカスタム アトリビュート セットからのアトリビュート定義を返します。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが動作します。false
の場合、ノードそのものがそこで動作します。3ds Max 5.1 より前のバージョンでは、基本オブジェクトが常に使用されていました。
custAttributes.getDefs <obj> [baseObject:<boolean>]
定義の配列をアトリビュート セットの順に返します。
オプションのキーワード引数 baseObject
が true
(既定値)に設定されている場合、指定されているオブジェクトがノードであれば、そこでは基本オブジェクトが動作します。false
の場合、ノードそのものがそこで動作します。3ds Max 5.1 より前のバージョンでは、基本オブジェクトが常に使用されていました。
次のトピック
3ds Max は、スクリプト カスタム アトリビュート定義のバージョン情報を使用して、既存のカスタム アトリビュートとシーンからロードされたカスタム アトリビュートとの間で競合が発生した状況を管理する方法を決定します。3ds Max 2012 以降、既定で、バージョン番号が最も大きい CA 定義が使用されます。ただしこの動作は、custAttributes
構造体の次のメソッドを使用して変更できます。
custAttributes.getSceneLoadVersionHandlingBehavior()
シーンがロードされたときにカスタム アトリビュート定義の競合を処理する現在の動作を返します。
custAttributes.setSceneLoadVersionHandlingBehavior {#neverUpdate | #alwaysUpdate | /
#updateWhenLoadVersionGreaterThanCurrentVersion | #updateWhenLoadVersionGreaterThanOrEqualToCurrentVersion} /
persistent:<boolean>
シーンがロードされたときにカスタム アトリビュート定義の競合を処理する動作を設定します。オプションは次のとおりです。
#neverUpdate
- バージョン番号に関係なく、シーン ファイルの定義を使用しません。#alwaysUpdate
- バージョン番号に関係なく、シーン ファイルの定義を常に使用します。#updateWhenLoadVersionGreaterThanCurrentVersion
- バージョン番号が既存の定義のバージョンよりも大きい場合、そのシーン ファイル バージョンのみを使用します。#updateWhenLoadVersionGreaterThanOrEqualToCurrentVersion
- バージョン番号が既存の定義のバージョンと同じか大きい場合、そのシーン ファイル バージョンのみを使用します。persistent
が true の場合、この設定は 3ds Max セッション間で保持されます。
custAttributes.getSceneMergeVersionHandlingBehavior()
シーンまたはオブジェクトが現在のシーンと合成されるとき、カスタム アトリビュート定義の競合を処理する現在の動作を返します。
custAttributes.setSceneMergeVersionHandlingBehavior {#neverUpdate | #alwaysUpdate | /
#updateWhenLoadVersionGreaterThanCurrentVersion | #updateWhenLoadVersionGreaterThanOrEqualToCurrentVersion} /
persistent:<boolean>
シーンまたはオブジェクトが合成されるとき、カスタム アトリビュート定義の競合を処理する動作を設定します。オプションは次のとおりです。
#neverUpdate
- バージョン番号に関係なく、合成されたシーン ファイルの定義を使用しません。#alwaysUpdate
- バージョン番号に関係なく、合成されたシーン ファイルの定義を常に使用します。#updateWhenLoadVersionGreaterThanCurrentVersion
- バージョン番号が既存の定義のバージョンよりも大きい場合、合成されたシーン ファイル バージョンのみを使用します。#updateWhenLoadVersionGreaterThanOrEqualToCurrentVersion
- バージョン番号が既存の定義のバージョンと同じか大きい場合、合成されたシーン ファイル バージョンのみを使用します。persistent
が true の場合、この設定は 3ds Max セッション間で保持されます。
シーン ファイルをロードする際にカスタム アトリビュート定義の処理方法の管理が必要になる場合があります。たとえば、API が変更された場合や、新しいバージョンの 3ds Max でカスタム アトリビュートを「パッチ」する必要がある場合などです。これらのメソッドを使用して、カスタム アトリビュートを処理するコールバックを登録できます。
custAttributes.registerDefLoadCallback <function>
シーンからロードされるときにスクリプト カスタム アトリビュート定義ごとに呼び出されるコールバックを登録します。<function>
は、カスタム アトリビュート定義の文字列である 1 つの引数を取り、1 つの文字列を返します。この関数は、ロード時に文字列を変更して、カスタム アトリビュートを効果的に再定義できます。3ds Max 2021 以降 で使用可能です。
注: カスタム アトリビュート定義は、シーンからカスタム アトリビュートのインスタンスをロードするために使用されるため、カスタム アトリビュート定義が正常にロードされるように、必要な最小限の変更のみを行う必要があります。具体的には、パラメータの追加や削除、パラメータ タイプの変更、またはアニメート可能かどうかの変更は行わないでください。これらの変更は、すべてロード処理に影響します。より広範囲に変更する必要がある場合は、custAttributes.redefine()
を使用し、シーンをロードした後に変更できます。
コールバックの実行時にエラーが発生した場合、エラー メッセージがリスナーに出力され、関数がコールバックとして削除されます(後続のカスタム アトリビュート定義については呼び出されなくなります)。
コールバックとして複数の関数を登録できます。
<boolean>custAttributes.unRegisterDefLoadCallback <function>
指定された function
を削除します。コールバックが見つかり削除された場合には true を返し、見つからなかった場合には false を返します。3ds Max 2021 以降 で使用可能です。
custAttributes.unRegisterAllDefLoadCallbacks()
registerDefLoadCallback()
によって登録されたすべてのコールバックを削除します。3ds Max 2021 以降 で使用可能です。
custAttributes.showregisteredDefLoadCallbacks [to:stream] [asArray:<boolean>]
registerDefLoadCallback()
によって登録されたすべてのコールバックを表示します。to:
「weaponData」カスタム アトリビュートの例を考えてみます。「default」パラメータを変更し、バージョン パラメータを追加する場合は、次のコールバックを登録します。
fn modifyCADef def =
(
if (findstring def "weaponData") != undefined do
(
def = substituteString def "default:10" "default:20"
def = substituteString def "attributes weaponData\n" "attributes weaponData version:1\n"
)
def
)
custAttributes.registerDefLoadCallback modifyCADef
custAttributes.showregisteredDefLoadCallbacks()