三日月館【別館】開発・制作Tips集
[3dsMax] MAXScriptで文字列のノード名からノードオブジェクトを取得する
最終更新:
fumiduki1985
-
view
MAXScriptのexecute関数またはgetNodeByName関数を使用する。
execute関数は、指定した文字列をMAXScript式としてコンパイル及び評価して結果を返す。
複数行に渡るMAXScript式だった場合、最後の式の結果を返す。
複数行に渡るMAXScript式だった場合、最後の式の結果を返す。
MAXScriptでは「$+オブジェクト名」を実行すると、その名前に一致するオブジェクトを返す。
そのため、スクリプトで作成した「$+オブジェクト名」の文字列をexecute関数に渡すことでオブジェクトを取得できる。
ただし、オブジェクト名に空白文字が含まれる場合、シングルクォートで囲む必要がある。(記述例2を参照)
そのため、スクリプトで作成した「$+オブジェクト名」の文字列をexecute関数に渡すことでオブジェクトを取得できる。
ただし、オブジェクト名に空白文字が含まれる場合、シングルクォートで囲む必要がある。(記述例2を参照)
指定したオブジェクトが存在しなかった場合、undefined等を返すのではなく、例外を発生するので注意。
getNodeByName関数はその名のとおり取得したいノード名の文字列を渡し、ノードを返す関数。
execute関数を使用する場合と違い、大文字/小文字を区別するかどうかを指定したり、指定された名前を持つ全ノードを配列で取得することもできる。
指定したオブジェクトが見つからなかった場合、undefinedを返す。
(同名ノードを配列で返すモードの場合は空配列を返す。)
execute関数を使用する場合と違い、大文字/小文字を区別するかどうかを指定したり、指定された名前を持つ全ノードを配列で取得することもできる。
指定したオブジェクトが見つからなかった場合、undefinedを返す。
(同名ノードを配列で返すモードの場合は空配列を返す。)
記述例:
name = "Sphere" obj = execute("$" + name)
記述例2:
obj = execute("$'Test Object'") -- 空白文字を含む場合はオブジェクト名をシングルクォートで囲む
記述例3:
name = "Sphere" -- execute使用時と違い「$」が要らない点に注意 obj = getNodeByName(name)