エクスプレッションと MEL 構文の違い

エクスプレッションと MEL 構文の違いは、オブジェクト アトリビュートへの直接アクセス、および時間変数と frame 変数の使用という、2点だけです。

オブジェクト アトリビュートへの直接アクセス

エクスプレッションではオブジェクト アトリビュートに直接アクセスできますが、MEL では getAttr コマンド、setAttr コマンド、getParticleAttr コマンド、または setParticleAttr コマンドを使用する必要があります。

注: 行列アトリビュート(worldMatrix など)は例外で、エクスプレッションで直接アクセスすることはできません。

以下は、オブジェクト アトリビュートに直接アクセスする、エクスプレッション構文の例です。

persp.translateX = 23.2;
float $perspRotX = persp.rotateX;

同じことを MEL で実行するには、setAttr コマンドと getAttr コマンドを以下の例のように使用する必要があります。

setAttr("persp.translateY", 23.2);
float $perspRotY = getAttr("persp.rotateY");

一対のパーティクルを作成するには、スクリプト エディタ(Script Editor)で次のコマンドを実行します。

particle -position 1 2 3 -position 2 1 3 -name dust;

ここで以下のエクスプレッション構文をパーティクル シェイプに使用できます。

vector $pos = position;
acceleration = <<2, 1, 0>>;

同じことを MEL で実行するには、setParticleAttr コマンドと getParticleAttr コマンドを以下の例のように使用する必要があります。

select dustShape.pt[0];
 float $temp[] =
 getParticleAttr("-attribute", "position", "dustShape.pt[0]");
 vector $position = <<$temp[0], $temp[1], $temp[2]>>;
 setParticleAttr("-attribute", "velocity", "-vectorValue",
 -3, 0, 0, "dustShape.pt[0]");

上の MEL コマンドは、particleShape の最初のパーティクルのみに対して実行されます。

time 変数と frame 変数

エクスプレッションでは、時間とフレームの定義済み変数を使用することができます。例:

persp.translateY = frame;
persp.rotateY = time;

MEL では時間とフレームを使用することができません。MEL で時間とフレームの情報にアクセスするには、以下を実行する必要があります。

float $frame = `currentTime -q`;
string $timeFormat = `currentUnit -query -time`;
currentUnit -time sec;
float $time = `currentTime -q`;
currentUnit -time $timeFormat;

コメント

エクスプレッションでは複数行のコメント(/* */)は使用できませんが、// のコメントは使用できます。