在 MEL 脚本中

在 MEL 脚本中,使用 getAttr 和 setAttr 命令来获取并设定属性值:

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

可以使用 getParticleAttr 和 setParticleAttr 命令来获取或设定粒子向量或浮点数组。

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

到节点的路径

如果一个场景中的两个对象具有不同的父对象,它们就可以具有相同的名称。例如,如果一个球体有一个 GroupA 父对象,另一个球体没有父对象,那么一个场景中可以有两个名为 doughnutHole 的球体。

在这些情况下,不能只使用其名称来指定对象,因为 Maya 并不知道所指的是哪个对象。MEL 将显示以下错误:

ERROR: Which one?

如果 Maya 无法自动判断所指的对象,就要指定该对象的唯一路径。

路径将列出查找对象所需的各级层次,告诉 Maya 如何找到所指的对象。例如:

在本示例中,手部对象的完整路径是:

|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;

,