スクリプトコントローラーではスクリプトコントローラーオブジェクトにdependsOnでコントローラーを割り当てる他に、
特定のオブジェクトノードを指定して、そのtransformの更新をリアルタイムにスクリプトコントローラーオブジェクトに反映する方法があります。
MAXScriptヘルプの ノード変数 で
AddNode <&TSTR>Name Node
と書かいてある部分がそれですが、具体的には
$dummy_a.pos.controller.X_position.controller.AddNode "Node_0" $dummy_b
のように書くようです。
dependsOnと違って使用するスクリプトコントローラーが入っている正確な位置を特定して書かなければならないため
メンテナンスを考えると頭が痛いような気もしますが、Max8以降はdependsOnに変わって.AddNodeでの指定が推奨のようです。
dependsOnはMax9~Max2012でも一応挙動するので、特に循環従属問題等でエラーが出なければ、対応している間はこちらを使うのもありかもしれません。
前述のヘルプ内では
とありますが、実際のところリグ等でパス名リテラルを使ってオブジェクト名を管理する方法をとると、うまく行かないので注意が必要です。
一応下にSoftImageと3dsMaxでの挙動説明など書いてみました。
特定のオブジェクトノードを指定して、そのtransformの更新をリアルタイムにスクリプトコントローラーオブジェクトに反映する方法があります。
MAXScriptヘルプの ノード変数 で
AddNode <&TSTR>Name Node
と書かいてある部分がそれですが、具体的には
$dummy_a.pos.controller.X_position.controller.AddNode "Node_0" $dummy_b
のように書くようです。
- $dummy_a.pos.controller.X_position.controllerはオブジェクト内にあるスクリプトコントローラーの場所です。
- .AddNode "Node_0"でスクリプトコントローラー内にNode_0という名前でノードが登録されます。
- $dummy_bはこれが動くとスクリプトコントローラーがリアルタイム更新するオブジェクトです。
dependsOnと違って使用するスクリプトコントローラーが入っている正確な位置を特定して書かなければならないため
メンテナンスを考えると頭が痛いような気もしますが、Max8以降はdependsOnに変わって.AddNodeでの指定が推奨のようです。
dependsOnはMax9~Max2012でも一応挙動するので、特に循環従属問題等でエラーが出なければ、対応している間はこちらを使うのもありかもしれません。
前述のヘルプ内では
ノード変数はシーンノードの参照を含有します。参照は名前に従属しないため、変数に格納されたノードの名前を変更してもスクリプトコントローラの動作は影響されません。
とありますが、実際のところリグ等でパス名リテラルを使ってオブジェクト名を管理する方法をとると、うまく行かないので注意が必要です。
一応下にSoftImageと3dsMaxでの挙動説明など書いてみました。
挙動説明 | SoftImage (Expression) | 3DSMAX (ScriptController) |
---|---|---|
| null_b.kine.local.posx | pass_dummy_a = "" objname_dummy_a = execute("$" + pass_dummy_a + "dummy_a") pass_dummy_b = "" objname_dummy_b = execute("$" + pass_dummy_b + "dummy_b") objname_dummy_a.pos.controller.X_position.controller.AddNode "Node_0" dummy_b objname_dummy_b.inode.posInParent.x |
0 件のコメント:
コメントを投稿