名前は、実行中の 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
を使用してください。$
は選択処理中にまだ設定されていない情報に依存しますが、selection
では選択へのアクセスに異なるメソッドを使用し、すでに設定済みの情報を使用します。