こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
maya pythonの学習情報って少ないですよね。(最初のころは本当に苦労しました。。)自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアルを作ってみたので参考にしていただければ幸いです。
今回は、5回目。スクリプトで複数のジョイントに対してリネームを行うことを通して、pythonの重要な文法「for文」を解説していきます。
※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
複数オブジェクトをリネームしてみよう
今回も実例からいくよ!そのあとに詳しく解説していくね。
ジョイントとメッシュが複数あるシーンで、以下のようなスクリプトを実行します。
処理内容は、「選択したノード以下のジョイントを取得し、名前の先頭にLeft_をつける」です。
joints=cmds.ls(selection=True,dag=True,type="joint")
for joint in joints:
cmds.rename(joint,"Left_"+joint)
スクリプトの実行によって、ジョイントの名前の先頭に「Left_」が付きました。
もう一度スクリプトを見てみましょう。
joints=cmds.ls(selection=True,dag=True,type="joint")
for joint in joints:
cmds.rename(joint,"Left_"+joint)
1行目は4限目でやったからわかるよ。2行目のfor…以降がわからないよー!
for文は複数の要素に対して繰り返す処理を命令する文なんだ。
詳しく見ていこう。
for文の仕組み
for文は以下のような構成になっています。
○○○ | 複数の要素が入った変数 for文よりも以前に定義してある必要がある ここに入っている要素の回数だけ処理を行う |
○ | for文の中で初めて定義される変数 文法から○は○○○の中の一つの要素と認識される |
: | 以下の処理を実行する、というマークみたいなもの |
␣␣␣␣ | 半角スペース4文字、「インデント」という pythonはインデントの後に書かれた処理を繰り返せばよいのだなと認識する |
実行したスクリプトの例で、for文を見てみましょう。
for joint in joints:
cmds.rename(joint,"Left_"+joint)
jointsは○○○に当たります。
これはcmds.ls(selection=True,dag=True,type=”joint”)で選択された
複数のジョイントが入った変数です。
jointsはこんなイメージだね。
○はjoint、これはこのfor文で初めて出てくる変数です。
僕はjointsのうちのひとつ、jointだよ。
cmds~からの内容が繰り返されるリネームの処理です。
今、jointsには [joint1,joint2,joint3,joint4] の4つが入っていますので、
リネームの処理は4回繰り返されます。
まず最初にjoint1に対して処理を行い、次にjoint2に、joint3に、、という具合に続いていきます。
for文は○○○の中のものをひとつずつ、入っている回数分
処理していくんだね。
renameの処理
for joint in joints:
cmds.rename(joint,"Left_"+joint)
for文で繰り返されているcmds~以下の処理を見ていきましょう。
cmds.の後にmayaコマンドが来るのでしたね。「rename」これが名前を変更するコマンドです。
renameコマンドのカッコの中は、以下のように書きます。
「名前を変えたいオブジェクトの名前」はjoint、for文の処理により、
1回処理が走る毎に [joint1,joint2,joint3,joint4] の各要素がjointに代入されていきます。
「変える名前」は、”Left_”+joint、これは「Left_」という文字列と、変数jointに入っている一つずつの要素名を合体する、という書式になります。
例えば1回目の処理では”Left_”+joint は Left_joint1となり、
2回目の処理はLeft_joint2、といった具合です。
pythonの書式で、文字列は「+」を用いて連結することができるので覚えておきましょう。
jointsの中の [joint1,joint2,joint3,joint4] 一つ一つに処理していくんだね~。
ところで、この [ ] って何か意味があるの?
それは、リストというんだ。よく使うものだからこれも確認しておこう
リストについて
リストとは、複数の要素を持つデータ型です。[]カッコの中に複数のオブジェクト等が格納されます。リストに含まれる一つ一つの項目を、要素と呼びます。
リストの中身は、先頭から順番にインデックスがふられています。
0番目からカウントするので、0がjoint1、1がjoint2、2がjoint3、3がjoint4です。
変数の後に[インデックス番号を記入]することで、リストの中の要素を取得することができます。
joints[0]と指定し、joint1を取得することができました。
joint1は [ ] がはずれてるね。これが取得したっていうこと?
そうだよ。リストのうちの一つの要素の中身を結果として返しただけで、
リストからなくなったわけではないよ。
まとめ
今回学習した内容のポイントをまとめます。
次回は、チェックツールを作ることを通して学習を進めたいと思います。
オススメの本。pythonが楽しく学べます☆
コメント