スクリプトジョブ
スクリプトジョブ
scriptJob という MEL コマンドを使用すると、
Maya の中でイベント・状態の変化・アトリビュートの変化があった時に、
特定のコマンド・プロシージャなどを実行させることができます。
これを応用すると、
モデリング・アニメーション作成時の操作手順を減らしたり、
GUI のカスタマイズなどができるようになります。
scriptJob コマンドでは、
何かが起きた場合に何のコマンド・プロシージャを実行するかを、
ジョブという形式で覚えておきます。
各ジョブには、ジョブ番号という番号が自動的に割振られてゆきます。
このジョブ番号によって、ジョブの取り消しが可能です。
scriptJob コマンドの主なフラグ
- -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 で表されるジョブを消去します。
主な状態の説明
scriptJob -listConditions で返ってくる状態の中から、主なものを以下にあげておきます。
これらはフラグの
-conditionTrue、
-conditionFalse、
-conditionChange
などで使用できます。
- playingBack
- アニメーションキーフレームをプレイバックしていると true になります。
- SomethingSelected
- 何かをセレクトすると true になります。
- busy
- Maya が何かを実行している時に true になります。
- writingFile
- ファイルを書き込んでいると true になります。
- readingFile
- ファイルを読み込んでいると true になります。
主なイベントの説明
scriptJob -listEvents で返ってくるイベントの中から、主なものを以下にあげておきます。
これらはフラグの
-event
で使用できます。
- DagObjectCreated
- 新しくトランスフォームノード・グループ・ジョイントなどが作られたとき。
- deleteAll
- File New を実行したとき。
- displayLayerChange
- ディスプレイレイヤが作られたか消されたとき。
- idle
- Mayaがアイドル状態にあり、優先順位が高いアイドルタスクがないとき
- MenuModeChanged
- シーンのモードを変更したとき。
("アニメーション"、"ポリゴン"、"サーフェス"、"ダイナミクス"、"レンダリング" の切替え)
- NewSceneOpened
- 新しいシーンが開かれたとき。
- playbackRangeChanged
- プレイバックされるキーフレームの範囲が変えられたとき。
- playbackRangeSliderChanged
- アニメーションの開始フレーム、または終了フレームが変えられたとき。
- quitApplication
- Maya を終了するとき。
(MELコマンドの quit、またはメニューの )
- renderLayerChange
- レンダリングレイヤが作られたか、消されたとき。
- renderLayerManagerChange
- レンダリングレイヤが他のレイヤに変えられたとき。
- SceneOpened
- シーンが開かれたとき。
- SelectionChanged
- 新しく選択されたとき。
scriptJob の使用例1
scriptJob を使用して、
セレクトされたオブジェクトを、
セレクトされると同時に消去するように設定してみましょう。
- 適当に、球体などのオブジェクトを数個作っておきます。
作ったら、すべてのオブジェクトがセレクトされていない状態にしておきます。
そうしないと、この例では scriptJob コマンドがうまく働きません。
- に、以下のようなコマンドを打ち込んで実行します。
scriptJob -conditionTrue "SomethingSelected" "delete";
scriptJob コマンドを実行した結果。
(// 結果: 30 // という番号に注意してください)
- このコマンドを実行した後にオブジェクトをセレクトすると、
セレクトされたオブジェクトが、delete コマンドが実行されることによって消去されます。
- このままでは、セレクトするたびにオブジェクトが消えてしまうので、
このジョブを取り消します。
ジョブを取り消したい時は、まずジョブの番号を調べます。
そのためには、上の 2 でコマンドを実行した際に表示されたジョブ番号を覚えておくか、または
以下のコマンドを実行することによって番号を調べます。
scriptJob -listJobs;
以下の例では、 30 が 2 で登録したジョブの番号だということがわかります。
- 番号がわかったら、以下のコマンドを実行することによって、
セレクトしてもオブジェクトが消えなくなります。
たとえば、番号が 30 ならば以下のように実行します。
scriptJob -kill 30;
scriptJobの使用例2
次に、 scriptJob コマンドを使用して、
オブジェクトの 移動X が 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;
- スクリプト エディタの によって scriptJob1.mel を読み込みます。
- 球体(sphere1)の 移動X の値を 10.0 以上にしても 10.0 に戻るようになります。
スクリプトの解説
-
global proc limitXValue1()
- limitXValue1 という名前のプロシージャを宣言します。
-
float $x = `getAttr sphere1.tx`;
- sphere1 という名前のオブジェクト(NURBS の球体)に属する tx ( 移動X )アトリビュートの値を変数 $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 を作り、移動X だけでなく 移動Y, 移動Z も 10.0 以上の値にならないように書き換えてみましょう。
(注意)
実行する前に、シーンの中のオブジェクトを全部消去しておくようにしてください。
まとめ
- scriptJob コマンドによって、
Maya 上で何かの変化があった場合に、特定のコマンド・プロシージャを実行することができます。
練習課題
参考
Prev | Next
Home | Contents
Mail