>   >  スクリプト兵法書 〜MAX Script編〜:Vol.2:はじめてのMAXScript
Vol.2:はじめてのMAXScript

Vol.2:はじめてのMAXScript

プログラム基礎の基礎

いくらMAXScriptリスナーを駆使しても、どうしてもプログラムを書かなければ実現できないことは多々あります。本職のプログラマーほど流暢にプログラミング言語を扱うことができなくても、ほんのちょっと概念と文法を覚えるだけでできることが一気に広がるのがプログラミングの楽しいところです。

ここからはちょっと退屈かもしれませんが、プログラムを書く上で最低限知っておかないといけない言葉と概念を解説します。

変数

「変数」は、数値や文字列などの値を入れておく場所です。変数の名前は、アルファベットまたは「_」(アンダースコア)で始まり、任意の英数文字または「_」を含むことができます。また、名前の大文字小文字は区別されません。



[例の引用 : MAXScriptリファレンス/名前、リテラル定数、および式/名前/名前]

変数に値を入れる(代入すると言います)ときは '=' を使います。a という名前の変数に 1 を代入するときは;



a = 1

......というように書きます。

変数と配列の概念図

変数と配列の概念図。配列(コレクション)については後述

制御構造

同じ処理を何回も繰り返したいときや、条件によって処理を変えたいときがあります。そのような時には「制御構造」を使います。
例えば、処理を繰り返す for 文、処理を変える if 文などがあります。

ブロック

処理のかたまりを「ブロック」と言います。MAXScript では、ざっくりと '(' と ')' で囲まれた部分をブロックと思っておきましょう。場合によってはブロックの中にブロックを入れる事もできます。
細かく言えばもっとたくさんありますが、退屈な上に理解するには結局は手を動かしてみるのが一番です。これらのことを頭の片隅に置きながら、実際のプログラムを見てみましょう。

前回の内容を詳しく読み解いてみる

環境が整ったところで、まずは肩慣らしに前回ご紹介したコードを解説していきますね。
こちらがそのコードです;



for s in selection do (
		print s.Name
)

......このコードは以下のような構造になっています。

print s.Name

後述しますが、「s 」にはオブジェクトが入っています。オブジェクトにはいくつか決まった変数(プロパティ)があって、「Name 」というプロパティはそのものズバリ、オブジェクトの名前を指します。

selection

MAXScriptで予め用意されている変数です。今選択しているオブジェクトの配列が格納されています。配列とは、変数が順番に並んだひとまとめのことと言えますが、正確には「selection 」は、MAXScriptにおいて「コレクション」と呼んでいます。詳しくは MAXScript リファレンスの[コレクション→コレクションのタイプ→ObjectSet値]を参照してください。ここを見ると、selection 以外にも様々な変数があることが分かりますよ。

ただ、今はあまり難しいことは考えないで、「selection っていうのを使うと選択しているオブジェクトの一覧が取れるんだな」ぐらいに思って頂ければ十分です。

for 文

「for」は、指定した条件が整うまで "()" で囲まれた処理を繰り返すための命令です。

MAXScript の for 文には、2種類の使い方があります。ひとつは今回の例で、配列の中身をひとつひとつ変数に代入しながら繰り返し処理を行うものです。
今回の例の場合、s という変数に selection から一つづつオブジェクトを取り出して代入して、その度にブロックの中の処理をしています。

もうひとつは、数値を変化させながら(大抵は1づつ加算しながら)繰り返し処理を行うものです。
では、同じ処理を加算しながら行うバージョンに書き変えてみます;



for i=1 to selection.count do (
		print selection[i].Name
)

......最初の例に比べて、ちょっとゴチャゴチャしてますね。最初に i に 1 が代入されて、1,2,3,...と selection.count(選択されているオブジェクトの数)まで加算しながら繰り返し処理を行います。

具体的な例を見てみましょう。今、Box001, Box002, Box003 が選択されているとします。そこで、サンプルコードを走らせるとどうなるでしょう;



/* 1度目のループ*/
s = selection[1] --s に $Box001 が入る
print s.Name     --"Box001"

/* 2度目のループ */
s = selection[2] --s に $Box002 が入る
print s.Name     --"Box002"

/* 3度目のループ */
s = selection[3] --s に $Box003 が入る
print s.Name     --"Box003"


/* おわり */

......for の部分を全て展開するとこのようになります。もちろん、このように書いても選択されているものの数が3つと決まっていれば同じことができますが、数が増えたり、名前以外のものを表示したいとなると途端に破綻してしまいます。せっかく苦労してスクリプトを書くのだから、どうせなら何度でも使い回せるようにした方が良いですよね。

その他の連載