アトリビュート スプレッドシート(Attribute Spreadsheet)(ウィンドウ > 一般エディタ > アトリビュート スプレッドシート(Windows > General Editors > Attribute Spread Sheet))を使用して、複数のアトリビュートを同時に修正することができます。
または、スクリプトを使用して行うこともできます。
次の例では、シーン内で選択したすべてのオブジェクトの可視性を無効にする MEL スクリプトの調査と使用方法を示します。
可視性(Visibility)アトリビュートの名前を照会します。
アトリビュートを修正するには、アトリビュートの正確な名前を知っておく必要があります。
オブジェクトを選択します。そのシェイプ ノード(たとえば pPlaneShape1)で、アトリビュート エディタ(Attribute Editor)のオブジェクト ディスプレイ(Object Display)セクションを展開し、可視性(Visibility)アトリビュートを無効にします。
アクションに関連付けられている MEL コマンドは、スクリプト エディタ(Script Editor)の上部ペインに表示されます。例:
setAttr "pPlaneShape1.visibility" 0;
このコマンドをスクリプトに含めると、ユーザ インタフェースを通して実行したのとまったく同じアクションを実行します。
string $nodes[] = `ls -selection`;
可視性アトリビュートはシェイプ ノードの一部であるため、最初にトランスフォーム ノードからシェイプ ノードを取得する必要があります。listRelatives コマンドを使用します。「選択したシェイプ ノードの名前はどのように調べられますか?」を参照してください。
最終スクリプトは次のようになります。
{ //Lists the transform nodes of all selected objects string $nodes[] = `ls -selection`; for ($node in $nodes) { //Loop through each object and obtain its shape node string $shapes[] = `listRelatives -shapes $node`; //Set the visibility attribute of each shape node to 0 //The shape node is saved to the 1st (or 0th) element of the $shape array setAttr ($shapes[0] + ".visibility") (0); } }
頻繁に実行する場合は、カスタム スクリプトをシェルフに保存することができます。
スクリプト エディタ(Script Editor)で、追加するスクリプトの行を選択して、中マウス ボタンでシェルフにドラッグします。
スクリプト言語の選択を求めるダイアログ ボックスが表示されます。
言語を選択すると、カスタム スクリプトを表すアイコンがシェルフ(Shelf)に追加されます。
このエディタを使用して、新しく追加したシェルフ(Shelf )をカスタマイズすることができます。たとえば、シェルフ(Shelves)タブ内のアイコンをカスタマイズしたり、コマンド(Command)タブ内のコマンドを変更したりできます。
Maya のインタフェースを通じてアクションを実行し、スクリプト エディタ(Script Editor )の上部ペインに出力された結果を確認することにくわえ、次の方法でアトリビュート名を照会することもできます。
たとえば、スクリプト エディタ(Script Editor)に次を入力します。
listAttr polySphere1
次の結果が上部ペインに出力されます。
// Result: message caching isHistoricallyInteresting nodeState binMembership frozen output axis axisX axisY axisZ paramWarn uvSetName radius subdivisionsAxis subdivisionsHeight texture createUVs //
polySphere1 はポリゴンのヒストリ ノードで、listAttr は球を作成するのに使用されたアトリビュート(サブディビジョン、半径など)を返します。
次のコマンドは、より多くのアトリビュート(rotateX、scaleX など)を返します。
listAttr pSphere1
pSphere1 はポリゴンのトランスフォーム ノードです。これはオブジェクトをトランスフォームするために使用されたアトリビュートが含まれているノードです。
listAttrがあまりに多くのアトリビュートを返してテキストが読みにくくなる場合、ノードに関するマニュアルでもアトリビュートを見つけることができます。
テクニカル ドキュメントのノード セクションで、トランスフォームに移動して、たとえばトランスフォーム ノードのドキュメントにアクセスするか、geometryShape でシェイプ ノードのドキュメントにアクセスします。このページで、スクリプトで変更できるアトリビュートの名前が確認できます。
node.attributeName がスクリプト エディタ(Script Editor)に追加されます。
アウトライナ(Outliner)で、表示 > シェイプ(Display > Shapes)と表示 > アトリビュート(チャネル)(Display > Attributes (Channels))を有効にします。アトリビュートを選択すると、選択コマンドがスクリプト エディタ(Script Editor)にエコーされるため、アトリビュート名が見つけられるようになります。例:
select -r pSphereShape1.castsShadows ;
アウトライナ(Outliner)を右クリックし、アトリビュート順序 > アルファベット、昇順(Attribute Order > Alphabetical, ascend)を選択してアトリビュートをソートし、見つけやすくします。
アトリビュートを取得して設定するには、getAttr と setAttr コマンドを使用します。
選択したノード、特定のタイプのすべてのノード、またはシーン内のすべてのノードのアトリビュートを変更することができます。
ls コマンドとそれに関連付けられたフラグを使用して、上記のいずれかをリストし、結果を配列に格納します。
たとえば、すべてのノードをリストするには:
ls
特定のタイプ(たとえば polySphere)のノードをリストするには:
ls -type polySphere
次のサンプル スクリプトは、タイプ polySphere のすべてのノードをリストした後、各球の半径を 2 ずつ増やします。
{ string $nodes[] = `ls -type polySphere`; for ($node in $nodes) { int $r = `getAttr ($node + ".radius")`; setAttr ($node + ".radius") ($r + 2); } }
シーン内の選択されたすべてのオブジェクトのトランスフォーム ノードをリストするには:
ls -selection
次のサンプル スクリプトは、選択リスト内のすべてのオブジェクトのスケールを 2 ずつ増やします。
{ string $nodes[] = `ls -selection`; for ($node in $nodes) { int $sX = `getAttr ($node + ".scaleX")`; int $sY = `getAttr ($node + ".scaleY")`; int $sZ = `getAttr ($node + ".scaleZ")`; setAttr ($node + ".scaleX") ($sX * 2); setAttr ($node + ".scaleY") ($sY * 2); setAttr ($node + ".scaleZ") ($sZ * 2); } }