>   >  スクリプト兵法書 〜MAX Script編〜:Vol.3:スクリプトの具体的な作り方(前編)
Vol.3:スクリプトの具体的な作り方(前編)

Vol.3:スクリプトの具体的な作り方(前編)

関数を使う

この、"Boxを10×10個配置する"というのはもうちょっと整理すれば機能として再利用できそうです。プログラムでは、こういったよく使う機能をひとまとめにすることができます。このようなひとまとめの機能を"関数"と言います。MAXScript では以下のように関数を定義します。



 fn funcName = (
 )

Boxジオメトリを10×10個配置する関数は以下のようになります;



 fn CreateBox10x10 = (
   for i=0 to 9 do (
     for j=0 to 9 do (
       x = i * 10
       y = j * 10
       b = Box pos:[x, y, 0] length:1 width:1 height:1
       b.Name = "Box_" + (i as String) + "_" + (j as String)
     )
   )
 )

ところが、このままでは"Boxを10×10個配置する" ということしかできません。10×20 個配置したい場合や、Z 方向にも配置したい場合には、 CreateBox10x20 という関数や CreateBoxZ のような関数を作らなければいけないのでしょうか? そんなことはありません。関数を"Boxをnx×ny×nz個配置する"という具合に、自由に指定できるようにするのです。

そこで、nx, ny, nz を指定するために"引数"を使います。関数に引数を渡すことで、その場その場に応じて関数の動きを変えることができます。
関数の作成については MAXScritpt リファレンスの"関数の作成"に詳細が書かれています......が、このマニュアルを理解して関数について勉強しようと思うのは無理です(苦笑)。本職のプログラマーでも、このような部分をきちんと読む人は殆どいません。もちろん、私もこの記事を書くまで一度も読んだことがありませんでした。通常は、関数の定義の仕方さえ覚えておけば十分です。引数つきの関数は以下のように定義します;



 fn CreateBoxXYZ nx ny nz = (
  (ここに処理する内容を書く)
 )

fn(functionの略)が、"これから関数を定義します"という宣言をしている部分です。続いて関数の名前、それから必要ならば引数が続きます。 = 以降、"()" で囲われている内容が関数の本体です。実際の関数は以下のようになります;



 fn CreateBoxXYZ nx ny nz = (
	for i=0 to (nx-1) do (
		for j=0 to (ny-1) do (
			for k=0 to (nz-1) do (
				x = i * 10
				y = j * 10
				z = k * 10

				b = Box pos:[x, y, z] length:1 width:1 height:1
				xyz = (i as String) + "_" + (j as String) + "_" + (k as String)
				b.Name = "Box_" + xyz

			)
		)
 	)
 )

この関数を呼ぶ方法は以下の通りです;



 CreteBoxXYZ 10 10 10

ループが今までよりも一段増えていますが、もう何てことないと思います。理解を深めるためにも、ぜひ実際にスクリプトを書いてみてくださいね。

その他の連載