MayaでPythonを使ってみよう!③~条件分岐~
こんにちはkazinosです。
前回、Pythonを扱う上で必要な「変数」「データ型」「計算方法」の簡単な説明と、
cmdsをつかってオブジェクトの操作「生成」「取得」「情報の変更」を解説しました。
とりあえず触ってみたいけど、どうしたらいいかわからない!という方は見てみてください。
▼前回の記事「MayaでPythonを使ってみよう!②~object操作編~」
今回は、「特定条件の場合、処理を変更する方法」について書いて行きます。
環境
Autodesk Maya2024.2
※別のバージョンでも基本的に同じ操作が可能です。
前提知識
Mayaのスクリプトエディタが操作できる
cmdsコマンドを使って操作をしたことがある
条件分岐「if文」をつかってみよう
条件分岐とは「もし〇〇の値が、Aならコッチの処理、Bならアッチの処理を行う」のように、特定の条件の場合に、行う処理を使い分けるための記述方法です。
まずはサンプルコードを見てみましょう。
name = "myCube"
if name == "myCube":
print("nameはmyCubeでした!")
elif name == "myPlane":
print("nameはmyPlaneでした!")
else:
print("nameはmyCubeでもmyPlaneでもありませんでした!")
結果:
nameはmyCubeでした!
ここで注目してほしいのは、2行目、4行目、6行目です。
if、elif、elseという記述がありますが、これがif文(条件分岐)の命令文になります。
それぞれ用途があるので、確認していきましょう。
■ if
条件分岐をする場合に必ず必要な命令文です。
書き方としては、ifの後に条件式を書いてその後に「:(コロン)」を書きます。
その次の行からはインデント(文字全体を右にズラす事)を下げて実行したい処理を記述します。
条件式は比較演算子を用いて、結果がTrue/falseになるような式を記述します。
if 条件式:
処理
■ elif
elifは前の条件がFalseだった場合に、さらに特定の条件で処理を分岐させたい時に使います。
意味としてはelse if(〇〇ではなければ)の略になります。
elifは必要なければ書かなくても良いですし、分岐が複数ある場合は何個でも追記する事ができます。
記述方法はif文と同様、elifの後に条件式とコロン、次の行はインデントを下げ、処理を記述します。
if 条件式:
処理
elif 条件式:
処理
elif 条件式:
処理
■ else
elseは前の条件がすべてFalseだった場合に、実行される処理です。
「全て処理がFalseだった時」という条件が既にあるので、条件式は書きません。
また、特に処理の必要がなければ書かなくてもOKです。
if 条件式:
処理
else:
処理
処理一覧と イメージ図
命令文 | 必要性 | 意味 |
---|---|---|
if | 必須 | 最初の判定 |
elif | なくてもOK | 上の処理が違った+さらに判定する場合 |
else | なくてもOK | 上の処理が全部違った場合 |
if文を使った最小構成
複数の条件分岐を行う構成
例題 if文を使った処理を書いてみよう!
ここまでif文の使い方について紹介してきましたが、座学的な話ばかりだと飽きてしまいますよね。
ここらで1つ、何か1つスクリプトをつくってみましょう。
・・・
例題として、オブジェクトの位置を取得して、X+の位置にいるのか、X-の位置にいるのか判定してみましょう。
仕様として、以下の条件の処理を書いて行きます。
今回の例題ではオブジェクトの位置情報(translateXの値)を取得する処理が必要です。
以下のコマンドで位置情報は取得できるので、こちらを使って判定処理を書いて行きましょう。
cmds.getAttr("pCube1.translateX")
実際に作ってみたい人はここで一度手を止めて、上記の内容を参考に書いてみましょう。
以下のいずれかの文章が表示されれば成功です!
結果:以下のいずれかになります。
+Xにあります
-Xにあります
Xは0にあります
回答例
回答例では変数や文字列操作を使っています。
変数って何?formatって?という人は以下の記事で触れているので見てみると良いでしょう。
# 情報の取得
objectName = "pCube1"
objectPosition=cmds.getAttr("{}.translateX".format(objectName))
printString=""
# if分でプリントする内容を決定
if objectPosition > 0:
printString="+Xにあります"
elif objectPosition < 0:
printString="-Xにあります"
else :
printString="Xは0にあります"
# プリント処理
print(printString)
結果:以下のいずれかになります。
+Xにあります
-Xにあります
Xは0にあります
【ざっくり解説】
どうでしょうか?
上手く行かない場合は記述が合っているか?インデントがズレてないか?など確認してみましょう。
ちゃんと思った通りに動作した人はおめでとうございます。
理解を深めたい方は条件式を変えてみたり、Y方向Z方向の処理を書き足したりして、オリジナルのコードをつくってあそんでみてください。
まとめ
今回は、「特定条件の場合、処理を変更する方法」について書いて行きました。
if文はPythonだけではなく、どのプログラミング言語でも使用する考え方で、とても良く使用されます。
今回は名前の判定や位置情報の判定を行いましたが、他にもさまざまな判定(オブジェクトタイプを判別したり、マテリアルがアサインされているかの判定など)を行う時に使用しますので、しっかりと使えるようになりましょう。
この記事が、これからMayaでPythonを始める方の参考になれば幸いです。
参考リンク
Discussion