----------------------- Page 1-----------------------
第9 章 MEL (Maya Embedded Language) 
9.1  使用Maya:MEL 
9.1.1  介绍MEL 
使用MEL  (Maya  内置语言),用户可以使用命令和脚本来扩展和自定义Maya 的功能。本章介绍MEL, 
包含有下面的内容: 
关于MEL。 
学习命令。 
输入命令。 
使用程序和脚本。 
使用Script Editor (脚本编辑器)菜单。 
表达式中的MEL。 
自定义MEL。 
9.1.1.1  关于MEL 
MEL 语言是Maya  功能的基础。用户可以使用MEL 命令来创建自己的用户界面,访问高级功能。对于 
特殊的场景,可以创建与之匹配的界面,或者对于某个特殊的项目,可以改变默认的参数设置。对于某些使用 
Maya 界面不容易改变的属性,可以使用MEL 为其输入精确的数值。另外,用户还可以创建MEL 程序和脚本 
来完成自定义的建模、动画、动力学和渲染任务。 
本书,Using Maya: MEL,对使用MEL 命令、程序和脚本进行了基础的介绍。如果要进一步地了解MEL 
可以使用Maya 的在线文件。在在线文件中,不但包含有本书中的内容,还包含有下面的文件: 
MEL  用户界面创建。 
按字母顺序的MEL 命令参考。 
按功能进行分类的命令参考。 
MEL 脚本参考。 
用户经常碰到的问题。 
MEL 命令的改变。 
DG 节点的变化。 
这些文件对于使用MEL 和Maya 有很大的帮助。 
9.1.1.2  学习命令 
MEL 包含有大量的命令来满足不同的需要。一些使用MEL  的典型例子包括快速创建物体、精确地移动 
物体,提高工作的效率。例如,用户可以使用下面的MEL  命令来创建一个半径为27.5  单位,名称为bigBoy 
的球: 
Sphere -radius 27.5 -name bigBoy ; 
----------------------- Page 2-----------------------
第九部分 / MEL 模块 
用户可以接着用下面的MEL 命令来沿Z 轴旋转bigBoy 90 度: 
rotate -r 0 0 90  bigBoy ; 
在下面的例子中,假设用户使用关节工具来创建了一个关节,并想沿X 轴方向移动关节5 个单位。用户 
可以在不中断创建的情况下,使用下面的命令来移动关节: 
move  -r 5 0  0; 
Maya 的在线技术文件对每个命令的用法、语法、返回值和例子都进行了描述。 
9.1.1.3  输入命令 
在Maya 中,可以使用多种方式来输入MEL 命令; “Script  Editor          (脚本编辑器)”或“Command  Line 
(命令线)”比较常用。用户还可以使用脚本文件,Maya  ASCII              (.ma)文件、工具架图标、快捷键和表达式
来执行MEL 命令。但最常用的方式是使用“脚本编辑器”。 
无论如何输入命令,所有的MEL 命令之后都必须有一个分号“ ; ”来结束它,如下面的MEL 命令: 
sphere –name roundy ; 
anslateX 7; 
what Is ls; 
help  ls; 
ls -typ nurbsSurface; 
1.  脚本编辑器 
使用脚本编辑器,用户可以输入MEL 命令。选择Window > General Editors > Script Editor 命令或单击Maya 
视窗右下角的        (脚本编辑器图标)可以显示脚本编辑器(见图9-1)。 
图9-1  脚本编辑器视窗 
在脚本编辑器的底部可以输入命令,在顶部显示命令的结果或错误信息。 
在底部部分中,用户可以输入命令或进行粘贴操作。使用键盘上字母部分的Enter 键可以另起一行,使用 
数字键盘上的Enter 键可以执行命令。如果输入的MEL 脚本命令没有错误,则Maya 会去除底部的脚本。否则 
的话,脚本不会被去除,并且错误信息会显示在脚本编辑器的顶部。 
在脚本编辑器中,用户可以输入任意数目的MEL 命令,甚至整个脚本文件的内容都可以输入,但在每个 
MEL 命令之后必须以分号结束。 
2.  命令线 
----------------------- Page 3-----------------------
第九章 / MEL (Maya Embedded Language) 
用户可以使用命令线来输入MEL 命令。选择Options > Command Line 命令可以显示命令线(见图9-2)。 
图9-2  命令线 
使用命令线和脚本编辑器来输入MEL 命令,也有一些区别: 
在命令线中执行命令时,既可以使用数字键盘上的Enter 键,也可以使用数字键盘上的Enter 键,而在脚 
本编辑器视窗中执行命令时,则必须使用数字键盘上的Enter 键。 
命令线只有一行,如果要输入多个命令,则必须使用分号把每个命令分开 
在命令线的右侧,只显示最后一个命令的结果;而在脚本编辑器中显示所有命令的结果。 
3.  获取MEL 命令的返回值 
一些MEL 命令返回数值。如果需要获取命令的返回值,可以使用键盘左上角的单引号或eval 命令。 
使用单引号 
用户可以将命令放入两个单引号之间,来取得命令的返回值,并且可以把返回值分配给其它变量,或者 
在脚本编辑器中显示它。 
例如: 
string $a[ ]; 
$a = `particle -p 5 0 5 -name Sun`; 
print ($a); 
第一个语句定义了一个名称为$a  的数组。第二个语句执行单引号中的MEL  命令,并把命令的输出值分 
配给$a。第三个语
句在脚本编辑器中显示$a 的数值为: 
Sun 
SunShape 
用户可以存储和显示任意的MEL 命令的结果。返回值的类型是由使用的命令决定的。在上面的例子中, 
----------------------- Page 4-----------------------
第九部分 / MEL 模块 
粒子命令返回了一个字符串数组。因此在等号左侧的变量的类型也应该是字符串。 
使用eval 命令 
使用eval 命令也可以获取返回值。与使用单引号相比,它允许命令中包含字符串变量。而使用单引号, 
也有其自己的优点,就是用户可以直接把返回值分配给一个变量,并可以显示它。 
例如: 
string $command = “ sphere “ ; 
eval($command + “- r 5 “); 
第一个语句把字符串sphere 分配给变量$command。第二个语句把参数-r 5 添加到字符串sphere 之后,并 
执行整个命令sphere    -r 5。此时Maya 会在场景中创建一个半径为5 的球。 
9.1.1.4  使用程序和脚本 
当用户在脚本编辑器或命令线中执行命令时,每个命令执行一个操作。如果要执行多个操作,则可以使 
用程序或脚本。程序和脚本有不同的用处。 
命令:执行一个操作 
程序:使用一个命令来执行多个MEL 命令。 
脚本:执行多个操作 
1.  程序 
MEL 程序是一组MEL 命令,使用一个命令就可以执行一个MEL 程序。程序可以是局部的,或是全局的。 
局部程序只有在自己的文件内才有效,而全局程序在文件外也是有效的。 
用户可以使用文本编辑器来创建一个脚本内的程序。用户还可以在脚本编辑器中输入程序。 
下面是一个MEL 程序: 
global proc return_type procedure (arguments) 
MEL_statements 
在上面的例子中,斜体的元素是随机的(可以使用,也可以不使用),每个arguments                        (输入)是由数值 
类型和名称组成的。用户可以使用多个输入,然后使用逗号把它们隔开。 
在下面的例子中,全局程序,helloValue,它的输入变量是一个整数和一个字符串变量,并返回了一个字 
符串。 
global proc string helloValue (int $value ,string $person) 
string $greeting; 
$greeting = “Hello “ + $person+” , number “ + $value; 
return $greeting; 
定义程序 
在执行一个程序之前,用户必须定义它。在定义程序时,Maya 把它调入到内存中,这样它才能执行。用 
户可以使用脚本编辑器的source  命令来定义一个文件中的程序,或使用命令
线来定义脚本中的程序。用户也 
----------------------- Page 5-----------------------
第九章 / MEL (Maya Embedded Language) 
可以直接在脚本编辑器中输入一个程序来执行它。用户也可以使用这种方式来执行脚本。如果用户在执行一个 
脚本之后,对其进行了修改,则必须再次执行它,才能使修改起作用。 
定义Functions (函数): 
一个函数是带有返回值的程序。当用户定义一个函数时,不能使用默认的输入。当用户执行一个函数时, 
用户必须提供所有的输入。 
例如,用户不能使用下面的方式来定义一个函数: 
proc int splat (int $value, bool = true)  编辑器在线使用
语句中的分配符(= )创建了一个默认的分配,这在MEL 中是不允许的。 
用户也不能使函数过载。如果多个程序具有相同的名称,但有不同的输入和返回值类型,则最后一个程 
序将覆盖上一个。例如,在下面的两个程序中: 
rad (int $x) ; 
rad (string $foo) ; 
第二个程序将覆盖第一个。 
执行程序 
使用一个MEL    程序和使用其它的 MEL      命令或函数是一样的。例如,如果要执行上面的 MEL                程序 
helloValue,在脚本、脚本编辑器或命令线中输入MEL 的名称即可。 
helloValue (1, “Jake”); 
// Result: Hello Jake, number 1 // 
为了成功地调入程序helloValue,则需要一个整数和字符串输入。用户可以不使用括号或逗号来执行程序。 
例如,在执行helloValue 时,用户可以使用下面的方式: 
helloValue 7 "Torq"; 
// Result: Hello Torq, number 7 // 
2.  脚本 
一个MEL 脚本是一个文件,在此文件中,可以包含MEL 命令、MEL 程序或者两者都有。典型地,用户 
可以使用MEL 脚本来执行一系列的命令。例如,用户可以使用一个脚本来创建一堵墙,然后为它分配一个砖 
的纹理。 
用户可以使用文本编辑器来创建脚本,然后把脚本文件保存在硬盘中。MEL                      脚本的文件名扩展为.mel. 
用户可以在不同的场景或不同的工作阶段中使用脚本。当用户执行MEL 脚本时,它不会变为场景的一部分。 
如果要重复脚本的作用,用户必须重新执行脚本。 
设置脚本的路径 
默认地,Maya 在scripts  目录中寻MEL 脚本,此位置在登录名之下。例如: 
在IRIX 系统中的路径: ~elvis/maya/scripts 
在Window NT 系统中的路径:C:\Aw\Elvis\maya\scripts 
使一个脚本可执行的最简单的方式就是把它们放到上面的目录中。 
默认地,在scripts  目录
中包含有一些脚本。这些脚本的名称大多是以menu_开头,这些脚本是Maya  内 
部使用的。 
用户可以在Maya 寻脚本的默认路径上添加目录: 
改变脚本路径: 
1)使用Windows NT 资源管理器或双击“我的电脑”图标,来显示Maya NT 的bin  目录。 
----------------------- Page 6-----------------------
第九部分 / MEL 模块 
默认地,此目录是C:\Aw\MayaX.X\bin。 
2)双击 来执行命令并显示对话框(见图9-3)。 
图9-003 环境设置 
在此对话框中显示了安装、项目、插件、脚本和位图目录的路径。这些路径包括安装时创建的默认的路 
径和用户自己指定的路径。用户不能改变默认的路径。 
对于Plug-in、script 和位图目录可以设置多个路径,在这些路径之间必须用分号隔离开。 
用户不能直接在此对话框中改变路径,这时可以使用下面的步骤。 
注意:如果用户的计算机中安装了多个版本,则在此对话框中一次只能显示一个版本的路径。版本的名 
称显示在标题条上。如果要显示其它版本的路径,单击Previous或Next按钮。如果要保存一个版本的路径, 
单击Save按钮。如果用户的计算机中只安装了一个版本,则这些按钮将变为无效。 
3)单击Script 路径盒右侧的Change 按钮,会弹出“Change Setting”对话框。 
注意,如果改变了Home 路径,则其它的路径也会根据新的Home 路径进行更新。此时用户会被询问是 
否确定要进行此操作。如果不需要,可以单击cancel 按钮来取消。 
4 )在“Change Setting”对话框中输入或编辑路径。 
用户可以在默认路径添加目录,但用户不能替换它们。 
如果要输入多个路径,使用分号隔开它们。 
单击Browse 按钮,可以在弹出的对话框中寻和选择路径。 
如果要恢复原始的默认路径,单击Restore Default 按钮。 
5)单击OK 按钮。 
在脚本中使用程序 
用户可以在脚本中使用全局或局部的程序。全局程序可以脱离它们的文件执行,而局部程序只在它们的 
文件中有效。 
如果Maya  发现一个没有定义的命令,它会查所有的脚本路径来寻与命令相同名称的脚本。当它发 
现此文件后,它会定义文件中的所有的全局程序。另外,文件中所有与命令的名称相同的全局程序都将被执行。 
例如,假设用户执行的命令为sayWhat。因为sayWhat 不是Maya  的内部命令。Maya 会查所有的脚本 
路径来寻名称为sayWh

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。