より適切な処理方法
存続グローバル変数の使用の回避
今まで有効だった機能が一部無効になりました。
当初はスクリプト化コントローラと外部参照をサポートするために追加されていました。
問題:
-
ロードするかどうかをコントロールできない
-
前の値が上書きされる
問題解決法:
存続データ保存用のスクリプト化されたカスタム アトリビュートの使用
存続グローバル変数の代わりにスクリプト化されたカスタム アトリビュートを使用し、シーン ファイルを含むデータを保存して上記の問題を回避できます。
スクリプト化されたカスタム アトリビュートは、シーンのルートに配置できます。
|
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 を提供できます。
-
カスタム アトリビュートを定義し、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]
)
|