三日月館【別館】開発・制作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メソッドが返すノード名と比較して該当のノードを返しているだけである。
