今まで有効だった機能が一部無効になりました。
当初はスクリプト化コントローラと外部参照をサポートするために追加されていました。
問題:
ロードするかどうかを制御できない
前の値が上書きされる
問題解決法:
3ds Max 8 の新しいスクリプト化コントローラを使用してください。
スクリプト化されたカスタム アトリビュートを存続データ保存用に使用してください(下記参照)。
存続グローバル変数の代わりにスクリプト化されたカスタム アトリビュートを使用し、シーン ファイルを含むデータを保存して上記の問題を回避できます。
スクリプト化されたカスタム アトリビュートは、シーンのルートに配置できます。
sceneDataCADef =attributes sceneDataCADef version:1 attribID:#(0x61e9ff5f, 0x63784819) ( parameters main rollout:params ( note type:#string ui:et_note default:"") rollout params "Scene Data Parameters" ( edittext et_note "Note: ") ) thescene = (refs.dependents rootnode)[1] rootNodeDataCA = undefined if (custattributes.add rootnode sceneDataCADef) do rootNodeDataCA = rootnode.custAttributes[rootnode.custAttributes.count] sceneDataCA = undefined if (custattributes.add thescene sceneDataCADef) do sceneDataCA = thescene.custAttributes[thescene.custAttributes.count] rootNodeDataCA.note sceneDataCA.note rootNodeDataCA.note = "rootnode" sceneDataCA.note = "thescene"
ファイルを保存してリロードすると、カスタム アトリビュートにアクセスできます。
rootNodeDataCA = undefined if(rootnode.custAttributes.count != 0) do rootNodeDataCA = rootnode.custAttributes[rootnode.custAttributes.count] sceneDataCA = undefined if(thescene.custAttributes.count != 0) do sceneDataCA = thescene.custAttributes[thescene.custAttributes.count]
外部参照シーンとしてファイルを取り込んでも、カスタム アトリビュートにアクセスできます。
xr = xrefs.getXRefFile 1 xr_root = xr.tree xr_rootNodeDataCA = undefined if (xr_root.custAttributes.count != 0) do xr_rootNodeDataCA = xr_root.custAttributes[xr_root.custAttributes.count]
スクリプト化されたカスタム アトリビュートの定義をスクリプト コントローラまたは式コントローラに配置すると、コントローラ用にカスタム UI を提供できます。
カスタム アトリビュートを定義し、UI のアニメート可能パラメータおよびロールアウトを含めます。
スクリプト コントローラを作成します。
スクリプト コントローラにカスタム アトリビュートを適用します。
スクリプト コントローラを適用します。
スクリプト コントローラに変数を作成します。
ターゲット値を変数に割り当て、カスタム アトリビュート パラメータをターゲットとして指定します。
createDialog または newRolloutFloater & addrollout を使用し、カスタム アトリビュートの UI を表示します。
例
floatDataCADef = attributes floatDataCADef version:1 ( parameters main rollout:params ( prop1 type:#float ui:s_prop1 ) rollout params "Parameters" ( spinner s_prop1 "Prop1: ") fn getRollout = params ) sc = float_Script() custattributes.add sc floatDataCADef floatCA = sc.custattributes[1] sc.addTarget "prop1" floatCA[#prop1] displayControlDialog sc "" mscas =for ca in sc.custattributes where isMSCustAttrib ca collect ca rollouts =for ca in mscas where isproperty ca #getrollout collect ca.getrollout() if rollouts.count == 1 then createdialog rollouts[1] else if rollouts.count > 1 do ( width = rollouts[1].width for ro in rollouts do width = amax width ro.width rof = newrolloutfloater "" (width+13) 0 0 0 for ro in rollouts do addrollout ro rof height = 6 for ro in rollouts do height += ro.height + 24 rof.size = [rof.size.x,height] )