【maya python5限目】複数オブジェクトに対してリネームを行おう

mayapy05 python入門
セミナーのお知らせ

10/2(水)のセミナーは終了しました。
受講いただいた皆様、ありがとうございました。次回のセミナーもお楽しみに!

CGWORLD +ONE Knowledge
【クリエイティブ時間を最大化】できる!はじめてのmayaPython②

https://tutorials.cgworld.jp/con/1997?from_category_id=48

こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。

maya pythonの学習情報って少ないですよね。(最初のころは本当に苦労しました。。)自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアルを作ってみたので参考にしていただければ幸いです。

今回は、5回目。スクリプトで複数のジョイントに対してリネームを行うことを通して、pythonの重要な文法「for文」を解説していきます。

>> すぐにrenameコマンドの解説に飛びたい方はこちら

このチュートリアルでわかること
  • スクリプトからリネームを行う方法
  • 複数のものに対して、同じ処理をくりかえし行う方法
  • 複数のものを扱うための「リスト」について

>> Pythonの勉強方法を知りたい方はこちらをどうぞ

※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。

複数オブジェクトをリネームしてみよう

ハムちゃん
ハムちゃん

今回も実例からいくよ!そのあとに詳しく解説していくね。

ジョイントとメッシュが複数あるシーンで、以下のようなスクリプトを実行します。
処理内容は、「選択したノード以下のジョイントを取得し、名前の先頭にLeft_をつける」です。

joints=cmds.ls(selection=True,dag=True,type="joint")
for joint in joints:
    cmds.rename(joint,"Left_"+joint)
mayapy05_01
実行前
mayapy05_02
実行後

スクリプトの実行によって、ジョイントの名前の先頭に「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 ○ in ○○:
␣␣␣␣処理の内容

○○○複数の要素が入った変数
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に、、という具合に続いていきます。

image
ピヨちゃん
ピヨちゃん

for文は○○○の中のものをひとつずつ、入っている回数分

処理していくんだね。

renameの処理

for joint in joints:
    cmds.rename(joint,"Left_"+joint)

for文で繰り返されているcmds~以下の処理を見ていきましょう。
cmds.の後にmayaコマンドが来るのでしたね。「rename」これが名前を変更するコマンドです。

renameコマンドのカッコの中は、以下のように書きます。

名前の変更を行うコマンド

rename(「名前を変えたいオブジェクトの名前」,「変える名前」)

pythonでは、()内に書かれる中身を引数(ひきすう)といい、
複数ある場合はカンマで区切ります。

「名前を変えたいオブジェクトの名前」はjoint、for文の処理により、
1回処理が走る毎に [joint1,joint2,joint3,joint4] の各要素がjointに代入されていきます。

image

「変える名前」は、”Left_”+joint、これは「Left_」という文字列と、変数jointに入っている一つずつの要素名を合体する、という書式になります。

image

例えば1回目の処理では”Left_”+joint は Left_joint1となり、
2回目の処理はLeft_joint2、といった具合です。

pythonの書式で、文字列は「+」を用いて連結することができるので覚えておきましょう。

文字列の連結

文字列は + で連結することができる
例:”こんにちは” + “ピヨちゃん”
結果:こんにちはピヨちゃん

ピヨちゃん
ピヨちゃん

jointsの中の [joint1,joint2,joint3,joint4] 一つ一つに処理していくんだね~。

ところで、この [ ] って何か意味があるの?

ハムちゃん
ハムちゃん

それは、リストというんだ。よく使うものだからこれも確認しておこう

リストについて

リストとは、複数の要素を持つデータ型です。[]カッコの中に複数のオブジェクト等が格納されます。リストに含まれる一つ一つの項目を、要素と呼びます。

scriptEditor
リストが入った変数jointsを実行して中身を確認しているところ

リストの中身は、先頭から順番にインデックスがふられています。
0番目からカウントするので、0がjoint1、1がjoint2、2がjoint3、3がjoint4です。

変数の後に[インデックス番号を記入]することで、リストの中の要素を取得することができます。

scriptEditor
scriptEditor

joints[0]と指定し、joint1を取得することができました。

ピヨちゃん
ピヨちゃん

joint1は [ ] がはずれてるね。これが取得したっていうこと?

変数くん
変数くん

そうだよ。リストのうちの一つの要素の中身を結果として返しただけで、

リストからなくなったわけではないよ。

まとめ

今回学習した内容のポイントをまとめます。

学習のポイント
  • for文の文法と処理のしくみ
  • renameコマンドを使っての引数の指定の仕方
  • 文字列は + で連結することができる
  • リストとその要素

次回は、チェックツールを作ることを通して学習を進めたいと思います。

はじめてpython学習するなら!

はじめてプログラミングを勉強するとき、エラーはつきものですよね。
何時間もスクリプトが動かないこともしばしば。。
そんな時、くわしい人に教えてもらいたい、と思うことはありませんか?

侍テラコヤは、はじめてpythonを学習する方にピッタリのサービスです。
サブスク型オンラインスクールで、月¥2980~の良心的なお値段!

現役エンジニアのサポートが充実しており、
オンラインのマンツーマンレッスンとQ&A掲示板で即座に悩みを解決することができます

maya python基礎

本サイトの【まとめ】 maya python 基礎 入門!では、
10回シリーズでmaya pythonの基礎が習得できるコンテンツを発信しています。

  • ちまたのスクリプトを読んで、内容を理解したい
  • mayaのスクリプトリファレンスの読み方を習得したい
  • 自分で簡単なツールを書きたい
  • 基礎的なmayaコマンドをpythonで使えるようになりたい

など、mayaでpython基礎を身に着けたい方は、ぜひご活用ください♪

オススメの本。pythonが楽しく学べます☆

コメント

タイトルとURLをコピーしました