名前は、実行中の MAXScript プログラム内にある変数やパラメータのようなエンティティを識別します。3ds Max シーンでオブジェクトを名前で識別する場合、パス名を使用します。パス名は、シーンの中の単一オブジェクトを指名すること、オブジェクト階層構造を介してある特定のオブジェクトを指定するほか、パターン マッチングを使ってオブジェクト セットを指名することができます。
次に、パス名リテラルのすべての構文を示します。
<path_name> ::= $<path> | $ <path> ::= [ <objectset> ] [ / ] [ <levels> ] <level_name> <levels> ::= <level> { / <level> } <level> ::= <level_name>
<level_name> ::= { <alphanumeric > | _ | * | ? | \ } '{ <alphanumeric > | _ | * | ? | \ }'
<path> のルートは <objectset> でもかまいません。こうすれば、パス名検索の対象を指定オブジェクト セットに限定できます。ObjectSets については、「ObjectSet 値」を参照してください。
例: |
$box01 -- object named 'box01' $torso/left_up_arm/left_low_arm -- hierarchy path name $*box* -- all objects with 'box' in -- the name $torso/* -- all the direct children of -- $torso $helpers/d* -- all helper objects whose name starts with 'd' |
3ds Max シーンのすべてのオブジェクトは、トラック ビューに表示されるときに階層化されます。これは 3ds Max でのスキームの体系化にとって重要であると同時に、オブジェクト名をオブジェクトへの階層内におけるパスで示すことができます。これは、オペレーティング システムのディレクトリ構造におけるパス名とも類似しています。
例: |
$dummy/head/neck |
シーン オブジェクト neck が、その親オブジェクト head とさらにトップレベルの親 dummy を持つものとして命名します。このパス名は、シーン内に同じ名前のオブジェクトが存在する場合を含め、3ds Max シーン内のオブジェクトを識別するのに役立ちます。 head がシーン内で 1 つしかない場合、MAXScript では、階層内の位置にかかわらず略式表記 $head を使うことができます。オブジェクト名が固有でない場合でも略式表記を使うことはできますが、同じ名前のオブジェクトのうちどれが取得されるかは予想できません。 |
また、パス名によって複数のオブジェクトを一度に参照する非常に便利な方法もあります。たとえば、ある親のすべての子を参照する、または、名前に foot という文字列を含むすべてのオブジェクトを参照するなどです。これには、OS シェル ファイル命名スキームと同様に、ワイルドカードのパターンを使用します。
例: |
$dummy/* |
dummy の直系子すべてに名前を付けます。「 * 」文字はワイルド カードとして使用されます。 |
$neck* |
名前が文字列 neck で始まるすべてのオブジェクトを検索します。すべての階層が対象になります。 |
ワイルド カードは、パス名の任意の位置に使用できます。
例: |
$*foot* |
名前に foot を含むすべてのオブジェクトを検索します。「 * 」は、任意の数の文字に対応します。 |
また、「?」ワイルドカード文字を使用すると、「文字種にかかわらずに」 1 文字を対応付けることができます。つまり、「?」 ワイルドカード文字は任意の 1 文字に対応します。
例: |
$box0? |
名前が box0 で始まり、 0 の後に 1 文字を含むすべてのオブジェクトを検索します。 |
ワイルドカード文字は、階層で親レベルを指定するときにも使用できます。
例: |
$dummy/*/* |
$dummy のすべての子に名前を付けます。 |
オブジェクトと、ネストされたレベルのすべての子を検索する場合、次のように、特別な省略レベル名「...」を使用します。
例: |
$dummy/.../box* |
$dummy のすべての子に名前を付けます。 これは、 $dummy とすべての box* の子( $dummy 以下)を参照します。「 ... 」は、省略レベルの下にあるすべての階層を検索することを意味します。MAXScript では次のように、「...」を使用するときには明白なので「/」を省略します。 |
$dummy...box* |
または、別の一般的な例 |
$dummy...* |
$dummy と任意のレベルの $dummy の子すべてに名前を付けます。 |
オブジェクトのパス名にワイルド カードを使用する場合、MAXScript は一致するオブジェクトをすべて同時に操作します。
例: |
hide $*foot* |
名前に foot を含むオブジェクトすべてを非表示にします。 |
一致する各オブジェクトのプロパティが設定される自動的なコレクション マッピングも実行できます。
例: |
$*box*.position += [10, 10, 0] |
名前に box を含むすべてのシーン オブジェクトの位置に [10,10,0] を追加します。詳細は、「Collections」を参照してください。 |
パス名の構文では、現在選択されているオブジェクトの指定に省略表記を使用できます。単独の「$」文字は、1 つのオブジェクトが選択されている場合は現在選択されているオブジェクトを、2 つ以上のオブジェクトが選択されている場合は ObjectSet としての現在の選択セットを、またオブジェクトが何も選択されていない場合は undefined を参照します。これはリスナーで選択を操作する場合に便利な省略表記です。
例: |
$.pos = [0,0,0] hide $ rotate $ 35 z_axis |
スクリプト内では、 selection ObjectSet を使用する方が、 $ を使用するより適しています。
selection は選択したオブジェクトの数にかかわらず、常に ObjectSet を含みます。選択されているオブジェクトがなく、 hide $ エラーが発生するところでは( $ の値は undefined )、 hide selection はエラーを生成しません。
3ds Max 内部の通知シグナルの処理方法のため、 select 変更ハンドラでの $ 形式による選択オブジェクトへのアクセスはお勧めしません。選択オブジェクトにアクセスするには selection ObjectSet を使用してください。 $ は選択処理中にまだ設定されていない情報に依存しますが、 selection では選択へのアクセスに異なるメソッドを使用し、すでに設定済みの情報を使用します。