Pythonのスクリプトで「この条件のときはOK」でも「この条件のときはダメ」と分岐させる方法を紹介します。
CG制作ツールのMAYAを使って説明しますが、あくまでもPythonの紹介なので、
MAYAを持ってなくても理解できるように紹介したいと思います。
以前にMAYAアーティストが初めて触るPythonスクリプトの記事を書いたので、
MAYAでスクリプトを書き始める事前準備として、以下の記事も読んでもらえると良いと思います。
|
この記事のはじめに書いた
「この条件のときはOK」でも「この条件のときはダメ」
という命令を書きたい時には if文 を使います。
例えば下の文章
もし 球体 が 4個 より 多かった ら ”球体は4個より多い” と表示する
これをプログラム的に表記すると
文を分解してみました
if
|
もし (もしもこの条件が当てはまるなら下段の命令文を続けて良い)
|
球体の数 > 4 :
|
条件式 球体の数は4より多い?
|
print(“”)
|
()の中に入っている内容 ”球体は4個より多い” を、出力表示する。
|
なんとなく理解できるでしょうか。
では、MAYAのスクリプトエディタに上の文章の条件を満たすスクリプトを書いてみます。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if sphere_num > 4 :
print("Number of spheres is more than 5")
import maya.cmds as cmds
MAYAでPythonスクリプトを書き始める文言です。
mayaコマンドをインポートします。
sphere_list = cmds.ls(sl=True)
選択してアクティブ状態にした球体の情報をsphere_listに入れます。
(※球体が生成されてる前提です)
sphere_num = len(sphere_list)
len()を使って、sphere_listに入っている球体の数をsphere_numに格納します。
とにかくsphere_numに選択した球体の個数が入っていると理解します。
if sphere_num > 4 :
ここで if文 条件式 です。
もし sphere_numの数が4より多ければ下段の命令文を続ける。
print("Number of spheres is more than 5")
上段のif文の条件が揃っていれば、”Number of spheres is more than 5″ と出力する。
MAYAで実行してみます。
事前に polySphereポリスフィア を複数個生成しておきます。
生成した polySphere をいくつか選択します。
スクリプトエディタに書いたスクリプトを選択して。
[Ctrl] + [Enter] で実行します。
スクリプトエディタの上段に
“Number of spheres is more than 5″と出力されたでしょうか?
出力された人は、ポリスフィアを5個以上選択した人です。それ以外、4個までしか選択してない人は何も出力されません。
選択する個数を変えて何度か試してみてください。
選択する個数が5個以上と4個までで反応が違ったら成功です。
if else
選択する個数が5個以上だと
“Number of spheres is more than 5”
と出力され
それ以外の個数だと何も出力されませんでした。
「それ以外」、違う言い方だと「5個以上では無い」場合に、
何かを出力したい場合は
else
を使います。
else に条件式は付きません。
ifの条件に見合わない「それ以外」の場合に、elseの下段にある実行命令文にいきます。
先程のスクリプトに付け足しました。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if sphere_num > 4 :
print("Number of spheres is more than 5")
else:
print("Number of spheres is 4 or less")
else:
sphere_num > 4 : の条件を満たさないので
print("Number of spheres is 4 or less")
“Number of spheres is 4 or less”と出力する。
また生成した polySphere をいくつか選択しましょう。
書いたスクリプトを選択して。
[Ctrl] + [Enter] で実行します。
今度は何かしら出力されたと思います。
選択する個数が5個以上だと
それ以外の個数だと
選択し直して何度か試してみてください。出力される文言が変われば成功です。
if elif else
ここまで
条件式1が満たす場合の実行命令文
else :
ifの条件式1が満たさない場合の実行命令文
を説明してきました。
この場合だと条件式は一つしかありません。
条件1の場合は駄目かもしれないけど条件2だったらどうなの?
そのように条件が複数ある場合は
elif
を使います。
例えば
5個以上であれば”more then 5″と出力、
3個以上であれば”more then 3″と出力、
それ以外は”2 or less”
スクリプトを変更しました。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if sphere_num > 4 :
print("more than 5")
elif sphere_num > 2 :
print("more than 3")
else:
print("2 or less")
if と else の間に elifと条件式 が入っています。
ifの条件に満たさない場合はelifの条件、
elifの条件が満たせばprint(“more than 3”)が実行される、
どちらの条件も満たさない場合はelseの実行命令文 print(“2 or less”)が実行される。
このスクリプトもMAYAで実行してみます。
polySphere をいくつか選択して。
スクリプトを選択して。
[Ctrl] + [Enter] で実行します。
何が出力されたでしょうか?
5個以上の場合は
3個以上であれば
それ以外は
と出力されたでしょうか?
また elif には個数の制限がありません。
実行命令文
elif 条件式:
実行命令文
elif 条件式:
実行命令文
elif 条件式:
実行命令文
.
.
.
.
else:
実行命令文
このように条件が複数ある場合、いくつでも条件を重ねられます。
演算式 [>] [<] [>=] [<=] [==] [!=]
if sphere_num > 4 :
if の後に条件が書かれてます。
この場合は 不等号[ > ] を使って 「4より大きい」 を表しています。
この不等号は他にもあります。
A > B | AはB より大きい |
A < B | AはB より小さい |
A >= B | AはB 以上 |
A <= B | AはB 以上 |
A == B | AはB 以下 |
A != B | AとB は違う |
スクリプトを書いてみました。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if sphere_num > 4 :
print("more than 5")
elif sphere_num > 2 :
print("more than 3")
else:
print("2 or less")
11より大きければ
8より大きければ
5だったら
それ以外の数だったら
と出力します。
MAYAで実行してみます。
polySphere をいくつか選択して。
スクリプトを選択して。
[Ctrl] + [Enter] で実行します。
どのように出力されたでしょうか?
選択する個数を変えて試してみてください。
意図する文言が出力されたら成功です。
if and or で複数条件
else で 複数の条件を重ねる書き方を紹介しました。
今度は、条件を and や or を並べる書き方を紹介します。
例えば、「この条件Aとこの条件Bの2つが同時に満たされる場合」とか
「この条件Aもしくはこの条件Bどちらかが満たされる場合」とか
スクリプトを or を使って変更しました。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if sphere_num >= 5 or sphere_num <= 2 :
print("more than 5 or 2 or less")
else:
print("Any other number")
if sphere_num >= 5 or sphere_num <= 2 :
「5以上」もしくは「2以下」であれば
print("more than 5 or 2 or less")
“more than 5 or 2 or less”と出力します。
MAYAで実行してみてください。
polySphere をいくつか選択して。
スクリプトを選択して。
[Ctrl] + [Enter] で実行します。
どうでしょうか?
5個以上もしくは2個以下
それ以外の個数、つまり3個と4個だと
と出力されるはずです。
|
if not で否定
not は「この条件が満されない場合」の意味で使います。
今までは if で 「条件が満たされた場合」 に命令文が実行されてきました。
notを付けると「条件が満たされない場合」の時に命令文が実行されます。
重要
ただ if自体は「条件が満たされた場合」で変わりません。
あくまでも not は条件式に対して付いているだけです。
if 「not + 条件」:
つまり
「条件が満たされない事が条件」
気をつけましょう。
スクリプトを変更しました。
import maya.cmds as cmds
sphere_list = cmds.ls(sl=True)
sphere_num = len(sphere_list)
if not sphere_num >= 5 :
print("not more than 5")
else:
print("Any other number")
if not sphere_num >= 5 :
選択した球体の数が5個以上で無い場合にprint(“not more than 5”)
“not more than 5″と出力します。
MAYAで実行してみてください。
5個以上だと
と出力され
4個以下だと
と出力されます。
[Python] for 文 繰り返し処理の使い方MAYAアーティストのスクリプト入門
最後に
実行命令文
elif 条件式2:
実行命令文2
else:
実行命令文3
if文には他にも様々な書き方がありますが、とりあえず以上のことを覚えておけば
アーティストが必要な大体のスクリプトは書けると思います。
if文はスクリプトを書く上で何かと必要になります。
しっかり覚えることをオススメします。
スクリプトを書きたいアーティスト・デザイナーが、詳しくは理解してないけど、こうやって書いたらあんな感じに動いた。
みたいな内容を目標にした記事です。
アーティスト・デザイナーがスクリプトプログラミングを学ぶキッカケになればと思い紹介しました。以上です
|
|
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|