MEL コマンドの構文

MEL には、Maya を使用するときのあらゆる状況に対応した、さまざまなコマンドが用意されています。たとえば、MEL コマンドを使用してすばやくオブジェクトを作成したり、正確に移動したりすることができます。また、オブジェクトの操作を効率化することも可能です。

たとえば、次の MEL コマンドで、半径 27.5 ユニットの bigBoy という球を作成することができます。

sphere -radius 27.5 -name "bigBoy";

その後、Z 軸を中心に bigBoy を 90 度回転させるには、次の MEL コマンドを使用します。

rotate -relative 0 0 90 "bigBoy";

別の例として、ジョイント ツールを使用してジョイントを作成し、X 軸方向にジョイントを 5 ユニット移動する場合、次の MEL コマンドを使用することができます。ジョイントの作成を中断する必要はありません。

move -relative 5 0 0;

慣例的に、多くのコマンドは名前を指定したオブジェクトに対して動作し、指定されていない場合には現在選択されているオブジェクトに対して動作します。

MEL コマンドは、命令構文と関数構文の 2 つの方法で使用することができます。

命令構文

命令コマンドの構文は、UNIX や DOS シェルのコマンドに似ており、コマンド名の後に任意のフラグや引数を使用します。

sphere -name "martha" -radius 10;

命令形は完結した文で、末尾には必ずセミコロンを付けます。エクスプレッションの一部としてコマンドの命令構文を使用する場合には、コマンドをバッククォーテーションで囲む必要があります。後述の戻り値を使用する: 関数構文とバック クォーテーションを参照してください。

クォーテーション マークを付けない文字列

命令コマンドの構文を使用する場合には(後で説明する関数構文とは対照的に)、1 語の文字列を囲むクォーテーション マークを省略することができます。したがって、球(sphere)コマンドは次のように記述できます。

sphere -name martha -radius 10;

特に必ず 1 語で表すノードやアトリビュート名などの文字列の場合、スクリプトにはこの記述を頻繁に使用します。ただし、初心者の場合は、文字列とキーワードやコマンドの見分けが付きにくくなるため、このような用法は避けた方が良いでしょう。

関数構文

関数構文はコンピュータ言語の標準的な関数コールに似ています。

命令構文 関数構文
attributeExists visibility mySphere;
attributeExists("visibility","mySphere");
abs -50;
abs(-50);

フラグ

フラグを使用するとコマンドの動作が変わります。フラグは、ダッシュ(-)を先頭に付けコマンド名の後に記述します。フラグに続けてパラメータを記述します。

sphere -radius 5;

この例では、radius フラグのパラメータは 5 です。

作成、編集および照会モード

多くのコマンドは、-edit-query という特別なフラグの一対に基づいて異なる動作をします。

sphere -name "george";
sphere -edit -radius 10 "george";
sphere -query -radius "george";
// Result: 10 //

各コマンドの Maya ヘルプ(Maya Help)に、作成、編集および照会モードでどのフラグが利用可能かが記載されています。

戻り値を使用する: 関数構文とバック クォーテーション

コマンドの関数構文を使用すると、コマンドは値を返します。命令構文を使用すると、コマンドはスクリプト エディタ(Script Editor)に戻り値を出力するだけで、使用できる戻り値は提供されません。エクスプレッションで命令構文を使用すると構文エラーの原因となります。

if (size($word)) print("Not empty.\n");
// Function syntax of size returns a value.
// This is OK.
if (size $word) print("Not empty.\n");
// Can't use imperative 
// This is a syntax error.

エクスプレッションで命令コマンド構文を使用するには、コマンドをバッククォーテーションで囲む必要があります。

if (`size $word`) print("Not empty.\n");

エクスプレッションの照会モードでコマンドの戻り値を使用する場合には、よくバッククォーテーションが使用されます。

if (`sphere -query -radius "mySphere"` == 5)
	print("This sphere has a radius of 5!";