介绍

Maya 中有三种类型的命令:运行时命令、MEL 程序和 Maya MEL 命令

运行时命令是由其他命令或脚本(Maya 命令和 MEL 程序)组成的命令。它类似于单行包裹器,可用于执行具有短标签的 MEL 命令行上的长脚本(或脚本集)。可执行的许多(但不是所有)菜单项和图标都使用运行时命令来启动

示例

创建并选择多边形,然后选择(Edit Mesh > Add Divisions)。许多命令显示在脚本编辑器的顶部窗格中。在此历史中滚动,您将看到已输出这些行(朝向顶部):

1
2
3
 SubdividePolygon;
performPolySubdivide "" 0;
polySubdivideFacet -dv 1 -m 0 -ch 1 pSphere1;

在底部输入

1
whatIs SubdividePolygon;

通过 whatIs 命令,可以查询字符串的类型(在这种情况下为 SubdividePolygon)

利用Mel进行属性修改
选择对象。在其形状节点(例如 pPlaneShape1)中,展开属性编辑器的“对象显示”(Object Display)部分,然后禁用“可见性”(Visibility)属性。

1
setAttr "pPlaneShape1.visibility" 0;

列出场景中所有选定对象的变换节点

1
string $nodes[] = `ls -selection`;

setAttr 命令可将每个形状节点的可见性设置为 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
//列出所有选定对象的变换节点
string $nodes[] = `ls -selection`;

for ($node in $nodes)
{
//循环遍历每个对象并获得其形状节点
string $shapes[] = `listRelatives -shapes $node`;

//将每个形状节点的可见性属性设置为0
//形状节点保存到$shape数组的第一个(或第0个)元素
setAttr ($shapes[0] + ".visibility") (0);
}

}

属性查询

1
listAttr polySphere1

输出

1
// Result: message caching isHistoricallyInteresting nodeState binMembership frozen output axis axisX axisY axisZ paramWarn uvSetName radius subdivisionsAxis subdivisionsHeight texture createUVs //

polysphere1 是多边形的历史节点,listAttr 返回用于创建球体的属性;例如:细分、半径等。

以下命令将返回更多的属性,如 rotateX、scaleX 等:

1
listAttr pSphere1 

“显示 > 形状”(Display > Shapes)和“显示 > 属性(通道)”(Display > Attributes (Channels))。选择属性时,将在“脚本编辑器”(Script Editor)中回显选择命令,以允许您找出属性名称

1
select -r pSphereShape1.castsShadows ;

修改选定节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 列出所有节点
ls

// 列出特定类型的节点
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);
}

}


保存脚本并调用

工具架方式

如何把写入的脚本保存到工具架
在脚本编辑器中,选择要添加的脚本行,然后使用鼠标中键将选择拖动到工具架。

将显示一个对话框,要求您选择脚本的语言。

选择语言后,表示您的自定义脚本的图标现在已添加到“工具架”(Shelf)。

右键单击该图标,然后选择“编辑”(Edit)以打开“工具架编辑器”(Shelf Editor)窗口。
可以使用此编辑器自定义添加到“工具架”(Shelf)的新项目。例如,在“工具架”(Shelves)选项卡中自定义图标,或者在“命令”(Command)选项卡中修改命令。

另存为 MEL 文件并调用其程序

以命令名称作为文件名、.mel 作为文件扩展名(例如,对于命令 myCommand,此名称为 myCommand.mel)将脚本保存到 MAYA_SCRIPT_PATH 中的文件夹。
如果选择此方法且 .mel 文件包含多个全局程序,则必须先调用 mycommand,然后再调用文件中的其他全局程序。因此,在这种情况下,此方法可能不是您的首选方法。

使用任意文件名保存脚本,然后使用 source 命令将其源化。
脚本源化后,可以按任意顺序调用其任何全局程序。

注: 如果不确定是否需要源化脚本,则可在调用之前测试函数在 MEL 中是否可用:

1
2
3
If (!`exists myFunction`) 
source myFile;
myFunction;

查询节点类型

1
2
nodeType nClothShape1;
// Result: nCloth //