表达式和 MEL 语法之间只有两个区别:直接访问对象属性,以及时间和帧变量的使用。        

直接访问对象属性

在表达式中,可以直接访问对象属性,而在 MEL 中则必须使用 getAttr、setAttr、getParticleAttr 或 setParticleAttr 命令。

以下是一些直接访问对象属性的表达式语法示例。

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 中的第一个粒子。

时间和帧变量

在表达式中,可以使用预定义的时间和帧变量。例如:

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;

注释

不能在表达式中使用多行 /* */ 注释。可以使用 // 注释。

,