スクリプトジョブ

スクリプトジョブ

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を使用してセレクトされたオブジェクトを消去するように設定してみよう。

  1. 適当に球などのオブジェクトを数個作っておく。
  2. Script Editor に以下のようなコマンドを打ち込んで実行する。
    scriptJob -conditionTrue "SomethingSelected" "delete";
  3. このコマンドを実行した後にオブジェクトをセレクトすると、 セレクトされたオブジェクトが消去(deleteコマンドが実行)される。
  4. この後、ジョブを取り消したい時は、まずこのジョブの番号を調べる。
    そのためには上の2でコマンドを実行した際に表示されたジョブ番号を覚えておくか、
    scriptJob -listJobs;
    を実行することによって番号を調べる。
  5. 番号がわかったら以下のコマンドを実行することによってセレクトしてもオブジェクトが消えなくなる。
    例えば番号が21ならば
    scriptJob -kill 21;

scriptJobの使用例2

次にscriptJobを使用してオブジェクトのX座標が10以上にならないようにしてみよう。
以下のスクリプトをmelディレクトリのscriptJob1.melに書き込んでScript Editorで実行すると、 作られた球をX座標が10以上の位置に移動してもX座標が10のところへ戻るようになる。

global proc limitXValue()
{
	$x = `getAttr sphere1.tx`;
	if($x > 10.0)
	{
		setAttr sphere1.tx 10.0;
	}
}
sphere -n sphere1;
scriptJob -attributeChange sphere1.tx limitXValue;

練習

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net