maya语言mel文本教学第三课-简单的命令和语法

maya语言mel文本教学第三课简单的命令和语法

在前两节课中我们讲解了mel的一些基础知识,大家知道了什么是变量什么是数组,并对其进行了实际操作和使用。从这节课开始我们使用mel就慢慢开始练习到场景内的实际操作,给大家介绍一些maya实际操作中所涉及的一些命令和语法

学习是一个循序渐进的过程,欲速则不达。我们由简入深。一步一步的跟一起研究mel,希望大家在群内一起探讨多多发言,营造本群的学习氛围。谢谢大家~

正文开始:

mel 初级命令和简单语法操作

在maya脚本里 int float string if for(if和for以后学判断语句和循环语句时会用到)等等这些是语言本身使用的,控制语言本身的流程。除了这些关键字意外,剩下的其他的语句都是命令。我们可以在maya的菜单栏的help下拉菜单中的MEL Command Reference中查询mel的所有命令语句。

mel命令的通用格式

命令的名称 空格 第一个参数 空格 参数的内容 空格 第二个参数 空格 参数的内容 以此类推,最后跟分号;这就是mel的通用格式,一个命令可能有几十个参数,有些参数是不需要更改的我们只需要其保留默认值就可以,这样我们就不用把他们都写在上面我们要更改哪个参数,我们就写那些参数进行设置和更改就可以了。

我们打开maya,在maya的mel编辑器中,我们输入 help polyCube 并运行,在mel的返回栏中就会详细的列出polyCube的所有参数,前面带“-”的都是他的参数,参数有长名表示法和短名表示法,长命表示法,比较清晰,短名表示法就是书写起来比较方便,每一个参数后面都有他的参数类型。如我们看到在参数中有一个-name参数,他后面跟的参数类型string,也就是说这个参数是字符串参数,我们可以通过这个参数给polyCube其名字。后面还有参数类型是int的就是参数类型是整数。好比-sw后面跟的参数类型就是整数类型,因为我们在设置polyCube的横向分段的时候不可能存在小数,如我们创建一个polyCube横向分段为5段而不可能是5.5段。在-w后面跟的参数类型是length就代表小数,这个参数表示polyCube的宽度,polyCube的宽度我们可以是任意小数,如我们创建一个polyCube宽度是2.3等。还有些参数后面的参数类型是on|off这个就表示这些参数是一个开关。还有些参数如-ax后面跟的参数类型是 length length length,这表示这个参数的x y z三个方向的三个数值。

如果我们要在场景里面使用mel创建一个名字为box 宽度是5,高度是5,厚度是10,横向分段为3,竖向分段为3,纵向分段为6。的一个polyCube,应该按照如下写法

polyCube -n \

这样就在maya场景中建立了我们需要的polyCube。我们在创建了polyCube后mel会提

供我们一个命令返回值,在运行绝大多数命令后,mel都会提供我们命令返回值,我们创建完polyCube后mel提供的命令返回值是// Result: box polyCube1 // 这个返回值包括两个内容 一个是box 一个是polyCube1,返回的box意思是我们创建的这个物体的名字是box,返回的polyCube1的意思是他的输入节点名为polyCube1。保留返回值很重要,如果我们场景中的物体比较多。我们创建了一个物体,如果我们不知道物体叫什么名字的话,我们要修改这个物体就要在场景中先找到这个物体,相对来说在一个复杂的场景这样的操作是比较麻烦的,同样也失去了脚本自动化处理的优势,为了以后还想使用这个物体,我们在创建这个物体后就 要保留这个物体的名字,如果我们要保留这个物体的名字我们可以首先定义一个字符串变量,因为他会反馈为一个字符串数组。方法如下

string $s [] = `polyCube -n \

大家注意:当我们使用命令作为字符串的返回值作为字符串数组的时候,需要用 键盘波浪线下面的` ` 将命令括起来,这样我们才能得到一个命令的返回值。否则maya将会不识别mel命令。

保留返回值的另一个意义就是,如果我们场景中已经有了一个polyCube的名字叫做box了,我们在执行创建名字为box的polyCube时候依然会执行,只不过maya会自动将box后面跟上数字,创建出来的polyCube的名字就为box1。因此如果场景内容太多的话很容易混杂,因此我们定义字符串数组将来就会得到创建物体后真正的名字。我们可以通过打印数组返回值来查看 {

string $s [] = `polyCube -n \

print $s; }

执行上面的脚本,大家就可以查看到我们创建的这个polyCube真正的名字和节点名。如果我们只想显示在maya场景中物体的名字而不显示节点名的话我们可以执行如下操作 {

string $s [] = `polyCube -n \

print $s[0]; }

我们上节课在将数组的时候已经讲过如何只显示数组中的标识。我们要显示第一个数组,只需要在[]中键入0即可。

我们可以通过 ls -sl 来列出我们所选择物体的列表作为一个字符串数组,方法如下

string $s[] = `ls -sl`;

当我们在场景中选择物体后,执行上面的语句就会将场景里面选择的物体作为一个字符串数组保存在变量$s中

如,我们在maya场景中创建三个 polyCube 名字分别为a b c ,在场景中选择这三个polyCube,执行下面的语句 {

string $s[] = `ls -sl`; print $s; }

则打印我们所选择的物体的名字为 a b c 这个也根据我们选择物体的先后有关,在maya中是讲究选择物体的先后顺序的,如我在场景中选择的物体顺序依次为 c a b 我们在执行上面的语句后会发现打印的$s的内容 则为 c a b 。

下面我在为大家介绍一下命令的三种模式

我们同样以polyCube为例我们在在mel编辑器中输入 help polyCube 显示polyCube的参数,在polyCube的参数里面我们看到了-e和-q 他们后面没有跟参数类型。他们其实是命令三种模式的其中两种,分别是编辑edit模式和查询模式query,另外还有一种是命令默认的模式是创建模式crate。

在没有指定edit模式和query模式下,命令默认为创建模式如我们最开始创建polyCube的那条语句 polyCube -n \他就是创建模式。创建模式就是要建立新的物体

编辑模式的意思是,场景里面已经有物体了,我们要对场景里面的物体重新编辑,我们就需要使用编辑模式来修改如我们才在场景里米娜创建了一个名字为box 宽度是5,高度是5,厚度是10,横向分段为3,竖向分段为3,纵向分段为6。的一个polyCube。我们要将横向段数修改为6。我们可以执行下面的操作

polyCube -e -n \

我们运行上面的脚本,发现场景里面的polyCube已经被修改。大家在执行编辑模式下一定要注意亮点,第一点是我们要在编辑模式下制定编辑对象的名称。第二点,执行编辑操作每次只能修改一个参数,如果你希望要即修改它的宽度又修改它的高度的话,就需要执行两条编辑语句。否则mel会认为这是语法错误

在我们执行了polyCube -e -n \后mel编辑器返回// Result: Values edited. // 这并不是显示返回值,而是告诉我们执行编辑操作成功。

如果我们要查询场景中现有物体的段数的话,我们就可以通过-q 来进行查询,我们还以上面的使用的场景为例,我们要查询场景中名为box的polyCube的横向段数我们要执行如下操作

polyCube -q -sw \

大家注意在查询模式下我们一次只可以查询一个参数,另外我们要将查询物体的名字放在后

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4