変形・配置
MaxScript チートシート の章一覧
オブジェクトを動かす操作です。プロパティを直接書き換える方法と、変形関数(move / rotate / scale)で相対的に動かす方法 の2系統があります。
位置・回転・スケールを読む / 書く
$.position -- 位置 [x,y,z](point3)。$.pos と同じ
$.pos.x = 10 -- X だけ変更
$.rotation -- 回転(quat)
$.scale -- スケール [x,y,z]
$.transform -- ワールド変換行列(matrix3)。位置+回転+スケールをまとめて持つ
$.pos = [0,0,0]のように丸ごと代入もできます。- ⚠️
$.pos.x = 10のような 成分だけの代入 は、ノードのワールド位置に対して効きます。親子関係があるときの挙動は後述の座標系に注意。
相対的に動かす(move / rotate / scale)
move $ [10,0,0] -- 現在位置から +X に10
rotate $ (eulerAngles 0 0 45) -- Z軸まわりに45度回す
scale $ [2,2,2] -- 2倍に拡大
rotate $ (angleAxis 90 [0,0,1]) -- 軸と角度で回す
move/rotate/scaleは 現在の状態に対する相対変形 です。絶対指定したいときはプロパティ代入を使います。
座標系を指定する(in coordsys)
in coordsys world move $ [10,0,0] -- ワールド基準
in coordsys local rotate $ (eulerAngles 0 0 90) -- 自分のローカル軸基準
in coordsys $Other move $ [0,0,5] -- 別オブジェクトの座標系基準
in coordsys grid move $ [1,0,0] -- アクティブグリッド基準
- 既定はワールド基準。ローカル軸で動かしたいときは
in coordsys localを付けるのが定石です。
別オブジェクトに合わせる(整列)
$A.pos = $B.pos -- 位置だけ合わせる
$A.rotation = $B.rotation -- 向きだけ合わせる
$A.transform = $B.transform -- 位置・向き・スケールを丸ごと一致させる(完全に重ねる)
- 「ピボットごと完全に重ねたい」なら
transformの代入が最短です。
バウンディングボックスと接地
$.min -- バウンディングボックスの最小コーナー
$.max -- 最大コーナー
$.center -- バウンディングボックス中心
$.pos.z -= $.min.z -- 一番下を Z=0(地面)に合わせる
min/max/centerは ワールド空間 の値です。サイズは$.max - $.minで求まります。
ピボット(基準点)を操作する
$.pivot = [0,0,0] -- ピボットをワールド原点へ
$.pivot = $.center -- ピボットをバウンディングボックス中心へ
$.objectoffsetpos -- ピボットに対するメッシュのオフセット
$.pivotを変えても メッシュは動きません(基準点だけが移動)。UI の「ピボットのみ影響」と同じ挙動です。
よく使う形
-- 選択を等間隔に並べる
i = 0
for o in selection do (o.pos = [i*30, 0, 0]; i += 1)
-- すべて原点に集める
for o in selection do o.pos = [0,0,0]
落とし穴まとめ
move/rotate/scaleは相対、プロパティ代入は絶対。混同しない。- ローカル軸で動かすなら
in coordsys localを明示する。 $.pivotの変更はメッシュを動かさない(基準点のみ)。min/max/centerはワールド空間。ローカルサイズが欲しいときは別途計算する。