スクリプトジョブ
スクリプトジョブ
scriptJob という MEL コマンドを使用すると MAYA の中でイベントや状態の変化があった時に特定のコマンド・プロシージャなどを実行させることができる。
これを応用すると、あるオブジェクトを移動すると他のオブジェクトもいっしょに移動したりすることができる。
(乗物の車輪など)
主なフラグ
下記の説明でコマンドの部分はプロシージャでもよい。
- -conditionTrue "string" "script"
- "string"で表される状態がtrueになった時、実行されるコマンド"script"を設定する。
- -conditionFalse "string" "script"
- "string"で表される状態がfalseになった時、実行されるコマンド"script"を設定する。
- -conditionChange "string" "script"
- "string"で表される状態が変化した時、実行されるコマンド"script"を設定する。
状態がtrueからfalseに、またはfalseからtrueになった時に"script"を実行する。
- -event "string" "script"
- "string"で表されるイベントが起きた時、実行されるコマンド"script"を設定する。
- -attributeChange "string" "script"
- "string"で表されるアトリビュートに変化が起きた時、実行されるコマンド"script"を設定する。
- -parent "string"
- "string"で指定されたユーザーインターフェースが存在する間だけジョブが存在する。
そのユーザーインターフェースが消されるとジョブも消去される。
- -listEvents
- 使用できるイベントの名前を返す。
- -listCondisions
- 使用できる状態の名前を返す。
- -listJobs
- 現在、存在するジョブを表示する。
- -kill number
- numberで表されるジョブを消去する。
主な状態の説明
-listConditionsで返ってくる状態の中から主なものを以下にあげてみる。
これらはオプションの
-conditionTrue、
-conditionFalse、
-conditionChange
などで使用できる。
- playingBack
- アニメーションキーフレームをプレイバックしているとtrueになる。
- SomethingSelected
- 何かをセレクトするとtrueになる。
- busy
- MAYAが何かを実行している時にtrueになる。
- writingFile
- ファイルを書き込んでいるとtrueになる。
- readingFile
- ファイルを読み込んでいるとtrueになる。
scriptJobの使用例1
scriptJob を使用してセレクトされたオブジェクトを、セレクトされると同時に消去するように設定してみよう。
- 適当に球などのオブジェクトを数個作っておく。
作ったら、すべてのオブジェクトがセレクトされていない状態にしておく。
そうしないと、この例では scriptJob コマンドがうまく働かない。
- に以下のようなコマンドを打ち込んで実行する。
scriptJob -conditionTrue "SomethingSelected" "delete";
scriptJob コマンドを実行した結果。
(Result: 135 という番号に注意)
- このコマンドを実行した後にオブジェクトをセレクトすると、
セレクトされたオブジェクトが消去(delete コマンドが実行)される。
- この後、このジョブを取り消したい時は、まずジョブの番号を調べる。
そのためには上の2でコマンドを実行した際に表示されたジョブ番号を覚えておくか、または
scriptJob -listJobs;
を実行することによって番号を調べる。
以下の例では 135 が 2 で登録したジョブの番号だということがわかる。
- 番号がわかったら以下のコマンドを実行することによってセレクトしてもオブジェクトが消えなくなる。
例えば番号が135ならば
scriptJob -kill 135;
scriptJobの使用例2
次に scriptJob を使用してオブジェクトの TranslateX が 10 以上にならないようにしてみよう。
- 以下のMELスクリプトをscriptJob1.melという名前で作る。
global proc limitXValue1()
{
float $x = `getAttr sphere1.tx`;
if($x > 10.0)
{
setAttr sphere1.tx 10.0;
}
}
sphere -n sphere1;
scriptJob -attributeChange sphere1.tx limitXValue1;
- Script Editorの によって scriptJob1.mel を読み込む。
- 球(sphere1)の translateX の値を 10.0 以上にしても 10.0 に戻るようになる。
スクリプトの解説
-
global proc limitXValue1()
- limitXValue1 という名前のプロシージャを宣言する。
-
float $x = `getAttr sphere1.tx`;
- sphere1 という名前のオブジェクト(NURBS の球)に属する tx ( translateX )アトリビュートの値を変数 $x に代入する。
-
if($x > 10.0)
- $x の値が 10.0 以上の場合は以下のコマンドを実行する。
-
setAttr sphere1.tx 10.0;
- sphere1 の tx アトリビュートに 10.0 をセットする。
-
sphere -n sphere1;
- sphere1 という名前で NURBS の球を作る。
-
scriptJob -attributeChange sphere1.tx limitXValue1;
- sphere1 の tx アトリビュートが変化したら、プロシージャ limitXValue1 を実行する。
練習
- scriptJob1.mel を参考にして scriptJob2.mel を作り、TranslateX だけでなく TranslateY, TranslateZ も 10.0 以上の値にならないように書き換えてみよう。
(実行する前にシーンの中のオブジェクトを全部消去しておくこと)
まとめ
- scriptJobによってMAYAのイベント・状態・アトリビュートの変化をとらえてコマンド・プロシージャを実行することができる。
練習課題
参考
Prev | Next
Home | Contents
Mail