三日月館【別館】開発・制作Tips集

[3dsMax] MAXScriptで文字列のノード名からノードオブジェクトを取得する

最終更新:

fumiduki1985

- view
管理者のみ編集可
MAXScriptのexecute関数またはgetNodeByName関数を使用する。

execute関数は、指定した文字列をMAXScript式としてコンパイル及び評価して結果を返す。
複数行に渡るMAXScript式だった場合、最後の式の結果を返す。

MAXScriptでは「$+オブジェクト名」を実行すると、その名前に一致するオブジェクトを返す。
そのため、スクリプトで作成した「$+オブジェクト名」の文字列をexecute関数に渡すことでオブジェクトを取得できる。
ただし、オブジェクト名に空白文字が含まれる場合、シングルクォートで囲む必要がある。(記述例2を参照)

指定したオブジェクトが存在しなかった場合、undefined等を返すのではなく、例外を発生するので注意。

getNodeByName関数はその名のとおり取得したいノード名の文字列を渡し、ノードを返す関数。
execute関数を使用する場合と違い、大文字/小文字を区別するかどうかを指定したり、指定された名前を持つ全ノードを配列で取得することもできる。
指定したオブジェクトが見つからなかった場合、undefinedを返す。
(同名ノードを配列で返すモードの場合は空配列を返す。)

記述例:
name = "Sphere"
obj = execute("$" + name)

記述例2:
obj = execute("$'Test Object'")   -- 空白文字を含む場合はオブジェクト名をシングルクォートで囲む

記述例3:
name = "Sphere"  -- execute使用時と違い「$」が要らない点に注意
obj = getNodeByName(name)


このページのタグ一覧
3dsMax MAXScript プログラミング

記事メニュー
ウィキ募集バナー