表达式和 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]");
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;