三日月館【別館】開発・制作Tips集
[3dsMax] MAXScriptのskinOps.GetBoneNameメソッドでノードを取得できない問題の回避
最終更新:
fumiduki1985
-
view
skinOps.GetBoneNameメソッドを使用すると、モーファーモディファイヤにセットされたターゲットノードの名前を取得することができる。
MAXScriptのガイドによると、第3引数の<nameflag_index>に0を渡すことでボーンの変換を持つノードを返すとあるが、(少なくとも3ds Max 2011 32bitでは)ノードの名前しか返さない。
MAXScriptのガイドによると、第3引数の<nameflag_index>に0を渡すことでボーンの変換を持つノードを返すとあるが、(少なくとも3ds Max 2011 32bitでは)ノードの名前しか返さない。
この問題について以下のURLでやりとりがなされており、回避のためのコードが示されている。
http://forums.cgsociety.org/archive/index.php/t-779310.html
http://forums.cgsociety.org/archive/index.php/t-779310.html
以下に回避コードの部分を引用する。(オリジナルはインデントがなく見辛いため、インデントのみ追加した。)
fn getBoneFromSkin theSkin boneID= ( local boneArray=for o in objects where (refs.dependencyLoopTest theSkin o) collect o local boneName=(skinOps.GetBoneName theSkin boneID 1) local notFound=true local i=0 while notFound and i<boneArray.count do ( i+=1 if boneArray[i].name==boneName then notFound=false ) if notFound then undefined else boneArray[i] )
基本的には、refs.dependencyLoopTestメソッドによってtheSkin(モーファーモディファイヤ)と関連のあるオブジェクトを列挙した後、skinOps.GetBoneNameメソッドが返すノード名と比較して該当のノードを返しているだけである。