一般的な代入 <assignment>
の構文は次のとおりです。
<destination> = <expr>
ここでは、<destination>
は次のうちのいずれかになります。
<var_name>
<property>
<array_index>
各 destination タイプについて以下に説明します。
MAXScript には swap()
メソッドがあり、このメソッドに 2 つの有効な代入先を引数として指定すると、値が入れ替わります。構文を次に示します。
swap <destination> <destination>
変数は、MAXScript <var_name>
によって識別されます。詳細は、「名前」を参照してください。 <destination>
が var_name
の場合は、値が代入される変数を識別します。次に例を示します。
x = 2 + 2 * 3 -- assign to variable x
y = [1, 2, 3] + pos -- assign to variable y
z = #(1, 2,"foo","bar") -- assign to variable z
z = #oops -- oops, changed my mind
<destination>
が <property>
または <array_index>
の場合は、アクセサに代入されます。アクセサとは、複合値のコンポーネント(配列や 3 次元ポイントなど)へアクセスするための構造体のことです。MAXScript の 2 種類の合成値に対応するアクセサには、次の 2 つがあります。
コンポーネント値は、配列や文字列のようにインデックスできる順序に整列されます。
複合値は、3 次元ポイントや時間間隔のように名前付きコンポーネントの固定セットを含みます。
ボックス、球、ベンド モディファイヤ、ビットマップ テクスチャといったすべての 3ds Max オブジェクトは、このシーン内の複合値として処理されます。高さ、角度、マップ ファイル名などのオブジェクトのすべてのパラメータに対しては、名前付きコンポーネントとしてアクセスします。MAXScript では、これらの名前付きコンポーネントのことをプロパティといいます。詳細は、「プロパティ、メソッド、演算子、リテラル」を参照してください。
アクセサには 2 つの形式があります。1 つは <array_index>
:
<operand> [ <expr> ] -- an indexed element
もう 1 つは <property>
: です。
<operand>.<var_name> -- a named property - property var_name of value in operand
アクセサへの代入例は、次のとおりです。
$box01.pos = baseObj.pos + (baseObj.radius*[0,0,1])
オブジェクト
box01
の位置プロパティを設定します(値が変数baseObj
に保存されているオブジェクトの位置および半径プロパティを基準にします)。z[2] = d.rotation as eulerangles
変数
d
に保存されている値の回転プロパティ値をeulerAngles
クラス値に変換し、この値を変数z
に保存されている配列の要素 2 に格納します。
構文定義では、.
または \[\]
の前に任意の <operand>
を使用することができます。アクセサ自体がオペランドなので、この定義は再帰的です。つまり、次のように複数のアクセサをつなげて、ネストされた配列またはプロパティを問い合わせることができます。
my_things[i][j]
my_objects[i].target.position.x
アクセサは、左から右へと評価されます。最初の例では、ネストされた配列または文字列の配列であると予想される i 番目の my_things
の要素を評価してから j 番目の要素を生成しています。
2 つ目の例は、配列 my_objects
からあるオブジェクトを取得し、次に target
、そしてターゲット(3 次元ポイント)の position
、最後にそのポイントの x
座標を取得します。
<operand>
にブロック式を使用して、アクセスするターゲット オブジェクトを計算することもできます。
例:
(instance myNode).pos=myNode.parent.pos
値が変数
myNode
に保存されているノードのインスタンスを作成し、その位置をmyNode
の親オブジェクトの位置に設定します。(find_table"foo")[n - 2] = "fred"
関数
find_table
をパラメータ値"foo"
を使用して呼び出します。通常、関数からの戻り値は配列になります。この配列の要素n-2
を値"fred"
に設定します。
MAXScript の値およびクラスに対して定義された名前付きプロパティについては、値とクラスに関する説明を参照してください。
代入では、<expr>
は <destination>,
の前に評価されます。次にその例を示します。
スクリプト:
a=#() -- create an empty array to play with a[(print "in <destination>";1)]=(print "in <expr>";10)
出力
#() -- result line 1 "in <expr>" -- output from <expr> side of assignment "in <destination>" -- output from <destination> side of assignment 10 -- result line 2
MAXScript での代入はそれ自体が式であり、代入された値を生成します。つまり、次のように他の式またはカスケード代入の内側で代入を使用することができます。
x = y = z = 0 #(1, 2, a = [0,0,1], 4)