maxScript の勉強

仕事の関係で、3dsMaxとmaxscript と、V-rayあたりを勉強することになったので覚えたことをメモメモ。

 

MaxScriptの仕様をざっと見たところ 見た目の書き方はどの言語とも言えない独特さ。
大体の仕様はインデントしないPython(ifやら関数の書き方は全く違うが)

変数は特に定義する必要はない ただし、str + int のように型が違う場合Errorになる
文末のセミコロンは必要なし 数式の評価が終わるところが文の終わりと判断される

オブジェクトの作成
box = box()
引数で初期値を指定する場合は、  attribute:param のように、アトリビュートと設定したいパラメーターの間にコロンをはさむ(値をセットする場合、基本この形をとる)
box = box length:20 width:20 height:20

引数がある場合()はいらない
返り値は構造体?クラス?のオブジェクト

作成したオブジェクトをあとから変更する場合は、以下のように配列.attributeに値を代入する
box.scale = [2,2,2] 逆に、値を取得したい時、変数に代入したい時は
arrayVal  = box.scale
のようにする。
値などをなにかにセットする場合は A = B のようにイコールを使用 この場合 BをAにセットする 関数の指定なんかもこれと同じ。 

構造体の要素を調べたい場合は showclass() を使用。
showclass “box.*”
作成したオブジェクトから値を操作するのではなく、ノード名から操作したい場合は、 $NodeName.attribute にすればOK
記事の記述がMaya基準の名称を使ってるのはMaya使いの性です(´・ω・`)

モディファイヤをセットする場合
addModifier Obj変数 or $ObjName (セットするモディファイヤを記述)
作成すると、上に積まれていく
モディファイヤを編集する場合は
Obj変数.モディファイヤ名.attribute  =  val
この場合、同じモディファイヤが複数あったあ場合 上に積まれているモディファイヤに対して値をセットしに行く。
特定のものにセットしたい時は、
$obj.modifiers[num].attribute = val
この場合の num は、積まれたモディファイヤの新しい方から1 2 … になる。
けどこの場合、上にモディファイヤが積み上がっていくと、特定のモディファイヤを調整するってのができないわけで
その場合どうすりゃいいのかやっぱり分からん
フロー制御の書き方

if A then B else C
AがTrueなら B そうでないならCを実行
for A to B by C do ()
A で 初期化 B まで実行 Cは、増加値
arr = for A to B collect i
A で初期化 Bまで実行 の初期化した変数iの変化を 配列で arr に代入
collect は、pythonのリスト内包表記と同等の機能かな。 

for A in arr do ()
arr 分繰り返し、その都度 A に配列の値をセット mel でいうところの for(A in arr){}

その他、switch do~while while~do try catch なども使用可能らしいが、とりあえずそのへんは使うときに調べる。
感覚的には、 mel 以上 python 未満 なスクリプト
この不思議な記述仕様にさえ慣れてしまえば、とても扱いやすい気がする。
やっぱり、実質的にはクラスと同等に扱える構造体があるというのは大きい。
ただ、他の言語と一緒に扱ってると 配列の始まりが1からだったり 関数定義が随分と違ったり $の使い方だったりで マルチ言語あるあるに 盛大に引っかかりそうなので
melとmaxScriptsの行き来はちょっとやだなぁ

スクリプト自体はあんまり問題なさそうだけど、maxそのものの知識が足りないので 勉強するべきは maxのもっと詳しい機能とか構造。
またしばらくHelpとにらめっこ(´・ω・`)

コメントを残す

メールアドレスが公開されることはありません。

*