MAYAは使えるスクリプトとしてMELの他にPythonも使うことが出来ます。
通常MELで書くときはMELだけ。 Pythonで書く時はPythonだけで済ましますし、殆どの場合それで十分対応可能です。
だた例えば、
- MELでPythonで書かれたスクリプトを実行したい場合
- Pythonにしか無い機能やモジュールを使いたい場合
などMELのみで書こうとすると面倒そうな事がPythonを使うことで簡単に済ませられる場面があります。
この記事ではMAYAのMELスクリプトにMAYAのもう一つのスクリプト言語のPythonを組み込んだ書き方を紹介したいと思います。
|
python()関数でMELにPythonコードを組み込む
MELにPythonコードを組み込むには
python(Pythonコード)
を使います。
python()にPythonコードを「“”」で囲んで文字列として書きます。
選択したオブジェクト名を出力するMELのスクリプトコード
まずMELで選択したオブジェクト名を出力するスクリプトコードを書きました。
$list_sl = `ls -sl`;
print($list_sl);
オブジェクトを選択してスクリプトを実行
結果:
選択したオブジェクトの名前が出力されました。
pCube3
pCube2
pCube1
MELのスクリプトコードにPythonコードを組み込む。
今度はMELで書かれたスクリプトコードに同じ結果になるようにPythonコードを組み込みます。
python("import maya.cmds as cmds");
$list_sl = python("cmds.ls(sl=True)");
print($list_sl);
説明:
python("import maya.cmds as cmds")
Pythonで書くのと同じくMELでpython()を使う場合もmaya.cmdsをインポートします。
$list_sl = python("cmds.ls(sl=True)")
python()を使ってPythonコードの”cmds.ls(sl=True)”を実行して戻り値をMELの変数「$list_sl」に代入します。
print($list_sl)
MELの変数「$list_sl」をMELのprint()で出力
結果:
MELだけで書かれたスクリプトの結果と同じくオブジェクトの名前が出力されました。
$list_sl = python(“cmds.ls(sl=True)”)
このコードで選択したオブジェクト名がMELの変数に代入された事が確認できました。
pCube3
pCube2
pCube1
print()も含め全てPythonコードにする
試しに出力print()も含めてpython()で書いてみます。
python("import maya.cmds as cmds");
python("list_sl = cmds.ls(sl=True)");
python("print(list_sl)");
説明:
python("list_sl = cmds.ls(sl=True)");
python()の中でPythonの変数「list_sl」に選択したオブジェクトのリストが代入されました。
python("print(list_sl)");
python()の中で変数「list_sl」をPythonのprint()を使って出力
結果:
スクリプトをPythonで書いた時のようにリストで出力されました。
python()内でfor文を使ったPythonコードを実行する
python()には文字列で書く必要がありますが、裏を返せば文字列であればPythonの構文に必要なインデントを含めたスクリプトコードも実行可能となります。
Pythonのfor文を使ったスクリプトコードをpython()内で実行してみます。
$python_code = "list_sl = cmds.ls(sl=True)\nfor i_list_sl in list_sl:\n print(i_list_sl)";
python("import maya.cmds as cmds");
python($python_code);
説明:
$python_code = "list_sl = cmds.ls(sl=True)\nfor i_list_sl in list_sl:\n print(i_list_sl)";
以下のPythonコードをインデントの箇所に改行文字「\n」を使い一列の文字列にしました。
list_sl = cmds.ls(sl=True)
for i_list_sl in list_sl:
print(i_list_sl)
python($python_code);
一列にしたPythonコードの文字列を代入した変数「$python_code」をpython()で実行します。
結果:
python()の中でPythonコードが実行されオブジェクト名がfor文で出力されました。
pCube1
pCube3
pCube4
|
MELにPythonを組み込んで辞書を使用する
MEL内でPythonコードを組み込む主な理由として、Pythonで書かれたスクリプトをMELで実行したい場合や、PythonにあってMELには無い機能を使いたい場合が在ると思います。
例えばPythonにあってMELには無い機能として
辞書
が思いつきます。
ではpython()を使ってMELの中でPythonの辞書を扱ってみましょう。
python("import maya.cmds as cmds");
python("dic = {'pCube1':'mcdonalds','pCube2':'MosBurger','pCube3':'BurgerKing','pCube4':'FreshnessBurger'}");
$list_sl = `ls -sl`;
for($i_list_sl in $list_sl)
{
$new_name = python("dic[\"" + $i_list_sl + "\"]");
rename $i_list_sl $new_name;
}
説明:
python("dic = {'pCube1':'mcdonalds','pCube2':'MosBurger','pCube3':'BurgerKing','pCube4':'FreshnessBurger'}");
python()内でPythonの辞書を用意しました。辞書は{オブジェクト名:新しい名前}の組になっています。
$list_sl = `ls -sl`;
MELで選択したオブジェクト名を取得
$new_name = python("dic[\"" + $i_list_sl + "\"]");
python()内でオブジェクト名をKeyにして辞書から組になる新しい名前を取得。MELの変数「$new_name」に代入します。
rename $i_list_sl $new_name;
MELのrenameでオブジェクト名を変更
オブジェクトを選択して実行します。
結果:
選択したオブジェクト名をKeyにして辞書「dic」から組になる名前を取得、オブジェクトの名前を変更しました。
|
まとめ
MAYAのMELスクリプトにPythonのコードを組み込む方法を紹介しました。
python()
を使います。
python()にはPythonコードを「””」で囲んだ文字列として書きます。
改行文字「\n」を使ってインデントを含めたPythonコードの文字列を実行する事が出来る。
MELでPythonスクリプトを実行したい場合や、Pythonにしか無い機能やモジュールを使いたい場合に役立ちます。
MELだけでは面倒な事もPythonを組み込む事で解決出来てしまうかも知れません。
python()
使ってみてはどうでしょう。
|
Adobeのプラチナパートナーに認定されているデジタルハリウッドのオンラインCGスクール「デジハリONLINE」が提供する「Adobeマスター講座」。
基礎動画教材とAdobe creative cloudの一年版ライセンスがセットになった、コスパ最強のパッケージプランです。
学習ノルマは一切ありません。AdobeCCだけを目的に契約してもOK!
>> デジハリONLINE「Adobeマスター講座」
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|