過去2回のセミナーの再配信が終了しました。
ご視聴いただいたみなさま、大変ありがとうございました!
引き続きMaya Pythonを学習される方にとって役立つ情報を発信していきますので
今後ともどうぞよろしくお願いいたします。

ツール作成の全体フローを最短距離で体験できます。スクリプト未経験の方におすすめ!
https://tutorials.cgworld.jp/set/2050

Mayaのオペレーションの自動化について徹底解説。様々な操作を自動化できるようになります
https://tutorials.cgworld.jp/set/2041
こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
maya pythonの学習情報って少ないですよね。自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアルを作ってみたので参考にしていただければ幸いです。
今回は、9回目。pythonスクリプトを保存し、importで呼び出す方法を学びます。「モジュール」や「関数」を扱えるようになると、誰かのツールを利用したり、既存のものに機能を追加していったりすることができますよ!

※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
スクリプトを保存する方法
スクリプトの保存は2ステップです。
- スクリプトの「関数化」を行う
- .pyファイルとして保存
今回保存するものは、
8限目で作成した、「コーンのらせん状配置」のスクリプトを使ってみます。

cone = "pCone1"
for i in range(15):
cmds.setAttr("locator1.ry",i*45)
cone2 = cmds.duplicate(cone)
cmds.parent(cone2,w=True)
cone2 = cone2[0]
cmds.setAttr(cone2+".ty",i*1)
meshes = cmds.ls(type="mesh")
conetranses = cmds.listRelatives(meshes,allParents=True)
for trans in conetranses:
aimcon = cmds.aimConstraint("locator2",trans,offset=(0,0,-90))
cmds.delete(aimcon)
スクリプトの「関数化」を行う
最初に、スクリプトを関数化しましょう。
関数化とは、複数行にわたって作成した処理を、1つの処理のまとまりとして定義することです。
例えば8限目の「コーンをらせん状に配置するスクリプト」は、
12行で処理を行っていましたが、
それを「関数化」すると、ひとつのコマンドとして呼び出すことができます。
関数は、下記の文章で定義することができます。
def ○○関数名○○():
␣␣␣␣関数化したい処理

関数名は自由に決めていいんだね。

そうだよ、「コーンをらせん状に配置するスクリプト」の関数名を
spiralConeとして、関数を定義してみるね。
def spiralCone():
cone = "pCone1"
for i in range(15):
cmds.setAttr("locator1.ry",i*45)
cone2 = cmds.duplicate(cone)
cmds.parent(cone2,w=True)
cone2 = cone2[0]
cmds.setAttr(cone2+".ty",i*1)
meshes = cmds.ls(type="mesh")
conetranses = cmds.listRelatives(meshes,allParents=True)
for trans in conetranses:
aimcon = cmds.aimConstraint("locator2",trans,offset=(0,0,-90))
cmds.delete(aimcon)

関数を定義すると、spiralCone()の1行だけでこの処理ができるんだよ!
.pyファイルを保存する
定義した spiralCone() 関数を、.py(python形式)で保存しましょう。
保存された.pyファイルのことを、モジュールと言います。
前処理として、スクリプトの冒頭に「from maya import cmds」を追記します。
from maya import cmds
def spiralCone():
cone = "pCone1"
for i in range(15):
cmds.setAttr("locator1.ry",i*45)
cone2 = cmds.duplicate(cone)
cmds.parent(cone2,w=True)
cone2 = cone2[0]
cmds.setAttr(cone2+".ty",i*1)
meshes = cmds.ls(type="mesh")
conetranses = cmds.listRelatives(meshes,allParents=True)
for trans in conetranses:
aimcon = cmds.aimConstraint("locator2",trans,offset=(0,0,-90))
cmds.delete(aimcon)
スクリプトエディタの
ファイル>スクリプトの保存… から

マイドキュメント>maya>scripts 以下に
.py形式で保存。名前はmayapy08.pyとします。

モジュールの保存ができました。



スクリプトをimportで呼び出す方法
次に、保存したスクリプトを別シーンから呼び出す方法を見ていきましょう。
手順は2ステップです。
- mayaにモジュールをインポートする
- モジュールの中の関数を実行する
スクリプトエディタに以下のように書きます。
import mayapy08
mayapy08.spiralCone()

1行ずつ解説していくね!
モジュールをインポートする
import mayapy08
モジュールは、pythonコマンドの import で呼び出すことができます。
import ○○○○(モジュール名)
モジュールの中の関数を実行する
mayapy08.spiralCone()
呼び出したモジュールの中の関数を実行するには、
「モジュール名.関数名()」 と書きます。
モジュール名.関数名()

mayapy08.py の中の spiralCone関数 を呼び出すから、
mayapy08.spiralCone() なんだね!

そう!簡単でしょ?
スクリプトの保存と実行はこれだけです!
それでは、保存したスクリプトを呼び出して実行してみましょう。
スクリプトを実行するシーンはこちら↓

mayapy08.py を呼び出して、spiralCone()関数を実行します。
import mayapy08
mayapy08.spiralCone()

期待通りの結果がえられました!
まとめ
今回学習した内容のポイントをまとめます。
スクリプトの保存方法
処理の関数化を行う
.py形式で保存する
スクリプトの読み込み方法
import モジュール名 で読み込む
モジュール名.関数名() で関数を実行する

いいねえ!よく使う操作を保存しておくと
作業を効率化できそうだね。
次回は、GUIの作成と、ボタンからスクリプトを実行する方法を解説します。
お楽しみに!
はじめてプログラミングを勉強するとき、エラーはつきものですよね。
何時間もスクリプトが動かないこともしばしば。。
そんな時、くわしい人に教えてもらいたい、と思うことはありませんか?
侍テラコヤは、はじめてpythonを学習する方にピッタリのサービスです。
サブスク型オンラインスクールで、月¥2980~の良心的なお値段!
現役エンジニアのサポートが充実しており、
オンラインのマンツーマンレッスンとQ&A掲示板で即座に悩みを解決することができます。
本サイトの【まとめ】 maya python 基礎 入門!では、
10回シリーズでmaya pythonの基礎が習得できるコンテンツを発信しています。
- ちまたのスクリプトを読んで、内容を理解したい
- mayaのスクリプトリファレンスの読み方を習得したい
- 自分で簡単なツールを書きたい
- 基礎的なmayaコマンドをpythonで使えるようになりたい
など、mayaでpython基礎を身に着けたい方は、ぜひご活用ください♪
オススメの本。pythonが楽しく学べます☆


復習はこちら↓
コメント