スクリプトジョブ
スクリプトジョブ
scriptJob という MEL コマンドを使用すると MAYA の中でイベント・状態の変化・アトリビュートの変化があった時に特定のコマンド・プロシージャなどを実行させることができます。
これを応用すると、乗物の車輪などのように、
あるオブジェクトを移動すると他のオブジェクトもいっしょに移動したりすることができます。
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
- シーンのモードを変更したとき。
("Modeling"、 "Animation"、"Dynamics"、"Rendering" の切替え)
- NewSceneOpened
- 新しいシーンが開かれたとき。
- playbackRangeChanged
- プレイバックされるキーフレームの範囲が変えられたとき。
- playbackRangeSliderChanged
- アニメーションの開始フレームまたは終了フレームが変えられたとき。
- quitApplication
- Maya を終了するとき。
(MELコマンドの quit、またはメニューの )
- renderLayerChange
- レンダリングレイヤが作られたか消されたとき。
- renderLayerManagerChange
- レンダリングレイヤが他のレイヤに変えられたとき。
- SceneOpened
- シーンが開かれたとき。
- SelectionChanged
- 新しく選択されたとき。
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