スタジオブロス TECH BLOG

スタジオブロススタッフからの最新ツール情報やチュートリアル・TIPSなどを紹介します

文系デザイナーのためのmaya MEL/Python基礎の基礎 Step2-5

今回は、前回出てきました関数=「def」を命令を理解しましょう。

関数は、

def 関数の名前(引数):

 [タブかスペースを空ける]命令1

 [タブかスペースを空ける]命令2

 [タブかスペースを空ける]命令3

  :

  :

次の命令 [タブかスペースなしで]

というルールです。例えば

import pymel.core as pm

polyCylinder()

pm.polySphere()

pm.cmds.move(2, 0, 0)

pm.polyCube()

pm.cmds.move(-2, 0, 0)

というプログラムを実行すると、以下の結果になります。

当たり前ですが、プログラムは実行した命令の数だけ自動でやってくれます。

それを毎度入力するのは大変です。では関数にします。

import pymel.core as pm

def TreeObject():

 pm.polyCylinder()

 pm.polySphere()

 pm.cmds.move(2, 0, 0)

 pm.polyCube()

 pm.cmds.move(-2, 0, 0)

これを実行しても何も起きません。そこで、

TreeObject()

を実行します。どうですか?ちゃんと同じことを1命令でできましたね?

では少し改造します。

import pymel.core as pm

def TreeObject(x):

 pm.polyCylinder()

 pm.polySphere()

 pm.cmds.move(x, 0, 0)

 pm.polyCube()

 pm.cmds.move(-x, 0, 0)

関数の実行の際に

TreeObject(3)とします。

どうですか?X=3なので、キューブとボールが±3の位置になりました。「引数」は関数の中に数値などのデータを送り届ける役割をするのです。

ではさらに改造します。

import pymel.core as pm

def TreeObject(x,z):

 pm.polyCylinder()

pm.cmds.move(0, 0, z)  pm.polySphere()

 pm.cmds.move(x, 0, z)

 pm.polyCube()

 pm.cmds.move(-x, 0, z)

その後、

import pymel.core as pm

for n in range(10):

 print n

 TreeObject(2,n)

を実行します。

こんな感じになりました。for命令は過去にやったと思いますが、

for n in range(10): で下にある行を10回繰り返す、という意味です。

そこにprint nでカウントしているnを表示して、TreeObject(2,n)で関数を呼び出しているのです。

pm.cmds.move(0, 0, z)で、nの値がzに入って移動しながらコピーする、という仕組みです。

でも何かおかしいですね?Zに移動しているのにY方向の上に積み重ねてしまっています。

Display→ObjectDisplay→Local rotationAxisを表示すると、各パーツは横置きなので、Zは上なのですね。

このように関数は長い命令を1つまとめて、プログラムを作りやすく、読みやすくすることができます。

今回はここまでです。