📝

MayaでPythonを使ってみよう!③~条件分岐~

に公開

こんにちはkazinosです。

前回、Pythonを扱う上で必要な「変数」「データ型」「計算方法」の簡単な説明と、
cmdsをつかってオブジェクトの操作「生成」「取得」「情報の変更」を解説しました。
とりあえず触ってみたいけど、どうしたらいいかわからない!という方は見てみてください。

▼前回の記事「MayaでPythonを使ってみよう!②~object操作編~」
https://zenn.dev/kazinos/articles/55494977b2c322

今回は、「特定条件の場合、処理を変更する方法」について書いて行きます。

環境

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って?という人は以下の記事で触れているので見てみると良いでしょう。
https://zenn.dev/kazinos/articles/55494977b2c322

# 情報の取得
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を始める方の参考になれば幸いです。

参考リンク

https://docs.python.org/ja/3/reference/compound_stmts.html#index-3

Discussion