アトリビュートの取得と設定を行う

MEL スクリプトの場合

MEL スクリプトでは、getAttrgetAttr と setAttrsetAttr コマンドを使用してアトリビュート値の取得と設定を行います。

sphere -name "Brawl";
print(getAttr("Brawl.scaleY"));
float $ys = `getAttr Brawl.scaleY`;
setAttr("Brawl.scaleY", $ys * 2);

getParticleAttrgetParticleAttr と setParticleAttrsetParticleAttr コマンドを使用して、パーティクルのベクトルまたは浮動小数点配列の要素の取得と設定を行うことができます。

float $Tmp[] = 
 `getParticleAttr -at position FireShape.pt[0]`;
vector $particlePosition = <<$Tmp[0], $Tmp[1], $Tmp[2]>>;
setParticleAttr -at position -vv 0 0 7 FireShape.pt[0];

エクスプレッションの場合

アニメーションのエクスプレッションでは、getAttr と setAttr コマンドは使用できません。エクスプレッションでは、ノード名とアトリビュート名だけが使用できます。

myCone.scaleY = mySphere.scaleX * 2

ノードへのパス

同じシーンにある 2 つのオブジェクトの親オブジェクトが異なる場合、これらのオブジェクトに同じ名前をつけることができます。たとえば、シーンにある 1 つの球の親が GroupA で、もう 1 つの球の親がない場合、2 つとも doughnutHole という名前にすることができます。

このような場合、Maya ではどちらのオブジェクトか識別できないため、名前だけでオブジェクトを指定することはできません。MEL は、提供されたデータが不十分であるため、スクリプトの行がスキップされたことを示すエラーを返します。

どちらのオブジェクトを指定しているかを自動的に判別できない場合、オブジェクトに固有のパスを指定する必要があります。

オブジェクトの検索に必要な階層を列挙したパスを指定することで、必要なオブジェクトを正確に見つけることができます。例:

この例では、hand オブジェクトのフル パスは次の通りです。

|character|shoulder|arm|hand

パイプ記号(|)は、その左側にあるオブジェクトが右側にあるオブジェクトの親であることを表します。

sphere -name doughnutHole;
group -name GroupA;
sphere -p 3 0 0 -name doughnutHole;
setAttr doughnutHole.scaleY 3.3; // ERROR: Which one?
setAttr GroupA|doughnutHole.scaleY 3.3;

親がないオブジェクトを指定するには、オブジェクト名の前にパイプ記号を使用します。

setAttr |doughnutHole.scaleY 0.3;

オブジェクトのフル パス名を指定するには、オブジェクト階層にあるすべての親オブジェクトの名前を入力します。親と親の間は必ずパイプ文字で区切ります。

group -name GroupB GroupA;
setAttr |GroupB|GroupA|doughnutHole.scaleY 1;