オブジェクト名によってオブジェクトを取得する方法はありますか。

MAXScript に関する質問と回答 > オブジェクト プロパティへのアクセス > オブジェクト名によってオブジェクトを取得する方法はありますか。

多くのユーザからの質問:

リスナー、スクリプト、またはスクリプト コントローラに、既知のオブジェクト パスを入力するときに、$ のプレフィックスを使用してオブジェクト パスを指定できます (たとえば、$Box001 と指定すると、「Box001」というオブジェクトが返されます)。しかし、文字列としてのオブジェクトの名前(「Box001」)だけしかわからないことがあります。この名前が対応しているシーン オブジェクトにアクセスするにはどうすればよいでしょうか。

回答:

オブジェクト名 (文字列) を、シーン オブジェクトに対応するオブジェクト パス (MAXScript 式) に変換するには、以下の 2 とおりの方法があります。

getNodeByName

この関数を使用すると、名前の文字列を大文字小文字の区別をする/しないのオプション付きでオブジェクト パスに変換することが簡単にできます。詳細についてはリンク先を参照してください。

Execute

execute メソッドを使用すると、あらゆる文字列を MAXScript 式に変換できます。ここには、オブジェクト パスをオブジェクト パス自体に格納するための文字列の評価も含まれます。オブジェクト名が文字列変数で保存されている場合、オブジェクト パスに変換する名前には「$」を文字列として追加する必要があります。「.」(ピリオド)または「 」(スペース)などの特殊文字が名前の文字列の一部にある場合は評価できないので、評価エラーを回避するために、オブジェクト名を「'」(シングル クォーテーション)で囲むことを推奨します。シングル クォーテーションで囲まれた文字はすべて、文字列の一部として認識されます。

例:

--if an object is called Box001, you could use
objName = "Box001"
objPath = execute ("$'"+objName + "'")

関連事項