maファイル内にmelコマンドを書く方法

検索ワードに【maya .maにmel】というのがあったので、Blogのネタにしてみます。


MayaのAsciiファイルは、基本すべてMelコマンドで書かれていますが 特定のコマンド以外を使用することができません。 使用出来るコマンドは

file requires createNode setAttr addAttr parent connectAttr disconnectAttr select currentUnit fileInfo

の、計11個。 しかし、それ以外のコマンドを実行したい!というケースもかなりあります。 そういう場合は、 scriptNodeを使用して コマンドを実行します。

scriptNode -n scriptNodeName -st Num -bs “<<cmd>>“;

-st は、どのタイミングでロードされるかのスイッチになります。
Num には、下の表から自分が望むロード方法の数字をいれます。

0 要求に応じて実行します。
1 ファイルのロード時またはノードの削除時に実行します。
2 ファイルのロード時またはノードの削除時に実行します(バッチ モードではない場合)。
3 内部
4 ソフトウェア レンダー時に実行します。
5 ソフトウェア フレーム レンダー時に実行します。
6 シーンの構成時に実行します。
7 時間が変更されたときに実行します。

-bs が、実際に動かしたいコマンド。
コマンドはダブルクォートで囲います。
source “Path”; のように、コマンドでダブルクォートを使いたい場合はバックスラッシュをつけます。
-bs “source”path”;”
コマンドは複数行書くことも可能で、その場合 行末にあたるところに ; を入れます。

一行に書くとわかりにくい場合 バックスラッシュを入れることで、 “” の途中でも改行することができます。
例)タイムスライダーを動かしたら abc とプリントするスクリプトを挟むサンプル

[cpp][/cpp]

scriptNode -n scriptNodeName -st 7 -bs ”
print “a”;
print “b”;
print “c”;
“;
[ /cpp]

タイムスライダーを動かすと、 abc とプリントする例。
(複数行の場合は、melファイルを作ってsourceするほうが良いとおもいますが。)

これを使用すると、シーンを読み込む最後に 特定の動作を挟み込むことが可能になり
レンダリング時のみ SmoothLevelを上げる FilePathの変更、RenderGlobalの値をセットする
などの動作を挟み込むことが手軽にできます。

コメントを残す

メールアドレスが公開されることはありません。


*