📃

MayaでPythonを使ってみよう!②~object操作編~

2024/11/19に公開

こんにちはkazinosです。

前回「pythonはどこに書けばいいの?」「どうやって実行するの?」という内容にフォーカスした内容の記事を書かせていただきました。
順を追っていけば、スクリプトエディタの起動方法、一通りの基本的な操作が分かる内容になっていますので気になる方は一度目を通してみてください。

▼前回の記事「MayaでPythonを使ってみよう!」
https://zenn.dev/kazinos/articles/e599bffb686678

前回でスクリプトエディタの使い方は説明したので、今回は「Mayaの機能をPytonで操作する」方法について執筆したいと思います。

環境

Autodesk Maya2024.2
※別のバージョンでも基本的に同じ操作が可能です。

前提知識

Mayaのスクリプトエディタが操作できる

プログラムに触れてみよう

プリントしてみよう

まずはおさらい。前回の記事でも記載していますが、基本的な事からやってみましょう。

以下のコマンドを打ち込んで実行してみてください。
結果の通りに表示されればOKです。

print("Hello world")
結果:Hello world

説明

解説部分 説明
print() 〇〇を実行してください という命令文。
printの場合は()の中身を表示してください となる。
”Hello world” ダブルクォーテーション(”)で囲った部分を文字として認識してね
という意味。 データ型の1種。
シングルクォーテーション(’)でもOK 。

変数を使って計算してみよう

var_A = 10
var_B = 20
bar_result = var_A + var_B
print(bar_result)
結果:30

説明

解説部分 説明
var_A
var_B
変数というデータを格納しておく箱のこと。
名前は分かりやすければ(初心者の内は)好きに付けてOK。
上記の例では「var_Aに10って数字を入れてね」という意味になる。
数字以外のモノも入る。
var_A + var_B 変数同士の計算。変数の中身によって結果が変わる。
上記ではvar_Aの中身が10、var_Bの中身が20なので「10+20」を行っている。
print(bar_result) bar_resultには「var_A + var_B」の計算結果が入る。
数字の場合はわざわざ文字に変換しなくても(””で囲ったりしなくても)printできる。

cmdsを使ってMayaを操作してみよう

お待ちかね、Mayaの操作を実際にやってみましょう!

オブジェクトを生成してみよう

from maya import cmds
cmds.polyCube()
結果:pCube1が生成される

説明

解説部分 説明
from~ import~ mayaのcmdsって機能を使うよーという意味。
説明は難しくなるのでここでは割愛。
cmds.XXXX cmdsはMaya操作用の命令がまとまってる便利セット。
cmdsの中にあるXXXXって命令を使ってねーと書くとその命令がMayaで実行される。
polyCube() cmdsの命令の1つ。キューブを作ってねーという命令。

オブジェクトを取得してみよう

前提条件:シーン内に「pCube1」がある事

from maya import cmds
selectObject = cmds.ls("pCube1")
print(selectObject)
結果:['pCube1']

説明

解説部分 説明
cmds.ls() lsコマンドを使うとオブジェクトを取得する事ができる。
(カッコ)の中には何を取ってくるかを決めるオプション決めが出来る。
("pCube1") オプション部分。プログラム的には「引数」と言う。
色んなオプションがある。
例だと
「オブジェクトを取る("pCube1”って名前のモノ)」
といった意味になる。

オブジェクトのパラメータを変更してみよう

前提条件:シーン内に「pCube1」がある事

「pCube1」を選択した状態である事

from maya import cmds
selectObject = cmds.ls(selection=True)
cmds.setAttr("{}.tx".format(selectObject[0]),5)
cmds.setAttr("{}.ty".format(selectObject[0]),10)
cmds.setAttr("{}.tz".format(selectObject[0]),-5)
結果:pCube1がX=5、Y=10、Z=-5の位置に移動する。

説明

解説部分 説明
cmds.ls(select=True) lsコマンドの選択オプション別バージョン。
選択したものを取得するようになる。
cmds.setAttr() 指定した「オブジェクト名.アトリビュート名」のパラメータを変更する時につかう命令
”{}.XXX”.format() 変数(文字列)の中身ちょっと付け加えたいな…って時につかえるやつ。
{}の部分に変数の値が入って、「.XXX」が後ろに付け加えられた文字列が作れる。
他にも「f文字列」や「%s」などがありますが、お好みで。
tx
ty
tz
アトリビュートの名前。今回の例はショート表記。
translateX、translateY、translateZと書いてもOK。
(ロング表記)

まとめ

今回の記事では「cmdsをつかって実際にMayaを操作してみる」という事にフォーカスして執筆しました。
生成、取得、変更の操作ができれば、最低限のやりたい操作はできるので、
「polyCube」「ls」「setAttr」を公式リファレンスで調べてみてください。
(あちこち見てみると「あ、これできるんだ!」という発見があって面白いですよ!)

本来プログラム初心者向けに話すのであればfor文やif文などを優先すべきなのでしょうが、この記事をみてくださってる方はおそらく「Mayaの操作を自動化したい」という人が多いので、cmdsを使った操作の紹介となりました。

変数の命名や文字列の話、タプルを紹介するか等、色々気になる点はありますが、初学者に説明するならこのくらいの解像度かな などと考えながら書いてみました。

この記事が、これからMayaでPythonを始める方の参考になれば幸いです。

参考リンク

▼データ型(組み込み型)
https://docs.python.org/ja/3/library/stdtypes.html

▼formatメソッド、f文字列(フォーマット文字列)、%s(printf形式)
https://note.nkmk.me/python-f-strings/

▼Mayaスクリプトリファレンス
https://help.autodesk.com/view/MAYAUL/2023/JPN/?guid=__CommandsPython_index_html

Discussion