您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > maya语言mel文本教学第三课-简单的命令和语法
maya语言mel文本教学第三课简单的命令和语法在前两节课中我们讲解了mel的一些基础知识,大家知道了什么是变量什么是数组,并对其进行了实际操作和使用。从这节课开始我们使用mel就慢慢开始练习到场景内的实际操作,给大家介绍一些maya实际操作中所涉及的一些命令和语法学习是一个循序渐进的过程,欲速则不达。我们由简入深。一步一步的跟一起研究mel,希望大家在群内一起探讨多多发言,营造本群的学习氛围。谢谢大家~正文开始:mel初级命令和简单语法操作在maya脚本里intfloatstringiffor(if和for以后学判断语句和循环语句时会用到)等等这些是语言本身使用的,控制语言本身的流程。除了这些关键字意外,剩下的其他的语句都是命令。我们可以在maya的菜单栏的help下拉菜单中的MELCommandReference中查询mel的所有命令语句。mel命令的通用格式命令的名称空格第一个参数空格参数的内容空格第二个参数空格参数的内容以此类推,最后跟分号;这就是mel的通用格式,一个命令可能有几十个参数,有些参数是不需要更改的我们只需要其保留默认值就可以,这样我们就不用把他们都写在上面我们要更改哪个参数,我们就写那些参数进行设置和更改就可以了。我们打开maya,在maya的mel编辑器中,我们输入helppolyCube并运行,在mel的返回栏中就会详细的列出polyCube的所有参数,前面带“-”的都是他的参数,参数有长名表示法和短名表示法,长命表示法,比较清晰,短名表示法就是书写起来比较方便,每一个参数后面都有他的参数类型。如我们看到在参数中有一个-name参数,他后面跟的参数类型string,也就是说这个参数是字符串参数,我们可以通过这个参数给polyCube其名字。后面还有参数类型是int的就是参数类型是整数。好比-sw后面跟的参数类型就是整数类型,因为我们在设置polyCube的横向分段的时候不可能存在小数,如我们创建一个polyCube横向分段为5段而不可能是5.5段。在-w后面跟的参数类型是length就代表小数,这个参数表示polyCube的宽度,polyCube的宽度我们可以是任意小数,如我们创建一个polyCube宽度是2.3等。还有些参数后面的参数类型是on|off这个就表示这些参数是一个开关。还有些参数如-ax后面跟的参数类型是lengthlengthlength,这表示这个参数的xyz三个方向的三个数值。如果我们要在场景里面使用mel创建一个名字为box宽度是5,高度是5,厚度是10,横向分段为3,竖向分段为3,纵向分段为6。的一个polyCube,应该按照如下写法polyCube-nbox-w5-h5-d10-sw3-sh3-sd6;这样就在maya场景中建立了我们需要的polyCube。我们在创建了polyCube后mel会提供我们一个命令返回值,在运行绝大多数命令后,mel都会提供我们命令返回值,我们创建完polyCube后mel提供的命令返回值是//Result:boxpolyCube1//这个返回值包括两个内容一个是box一个是polyCube1,返回的box意思是我们创建的这个物体的名字是box,返回的polyCube1的意思是他的输入节点名为polyCube1。保留返回值很重要,如果我们场景中的物体比较多。我们创建了一个物体,如果我们不知道物体叫什么名字的话,我们要修改这个物体就要在场景中先找到这个物体,相对来说在一个复杂的场景这样的操作是比较麻烦的,同样也失去了脚本自动化处理的优势,为了以后还想使用这个物体,我们在创建这个物体后就要保留这个物体的名字,如果我们要保留这个物体的名字我们可以首先定义一个字符串变量,因为他会反馈为一个字符串数组。方法如下string$s[]=`polyCube-nbox-w5-h5-d10-sw3-sh3-sd6`;大家注意:当我们使用命令作为字符串的返回值作为字符串数组的时候,需要用键盘波浪线下面的``将命令括起来,这样我们才能得到一个命令的返回值。否则maya将会不识别mel命令。保留返回值的另一个意义就是,如果我们场景中已经有了一个polyCube的名字叫做box了,我们在执行创建名字为box的polyCube时候依然会执行,只不过maya会自动将box后面跟上数字,创建出来的polyCube的名字就为box1。因此如果场景内容太多的话很容易混杂,因此我们定义字符串数组将来就会得到创建物体后真正的名字。我们可以通过打印数组返回值来查看{string$s[]=`polyCube-nbox-w5-h5-d10-sw3-sh3-sd6`;print$s;}执行上面的脚本,大家就可以查看到我们创建的这个polyCube真正的名字和节点名。如果我们只想显示在maya场景中物体的名字而不显示节点名的话我们可以执行如下操作{string$s[]=`polyCube-nbox-w5-h5-d10-sw3-sh3-sd6`;print$s[0];}我们上节课在将数组的时候已经讲过如何只显示数组中的标识。我们要显示第一个数组,只需要在[]中键入0即可。我们可以通过ls-sl来列出我们所选择物体的列表作为一个字符串数组,方法如下string$s[]=`ls-sl`;当我们在场景中选择物体后,执行上面的语句就会将场景里面选择的物体作为一个字符串数组保存在变量$s中如,我们在maya场景中创建三个polyCube名字分别为abc,在场景中选择这三个polyCube,执行下面的语句{string$s[]=`ls-sl`;print$s;}则打印我们所选择的物体的名字为abc这个也根据我们选择物体的先后有关,在maya中是讲究选择物体的先后顺序的,如我在场景中选择的物体顺序依次为cab我们在执行上面的语句后会发现打印的$s的内容则为cab。下面我在为大家介绍一下命令的三种模式我们同样以polyCube为例我们在在mel编辑器中输入helppolyCube显示polyCube的参数,在polyCube的参数里面我们看到了-e和-q他们后面没有跟参数类型。他们其实是命令三种模式的其中两种,分别是编辑edit模式和查询模式query,另外还有一种是命令默认的模式是创建模式crate。在没有指定edit模式和query模式下,命令默认为创建模式如我们最开始创建polyCube的那条语句polyCube-nbox-w5-h5-d10-sw3-sh3-sd6;他就是创建模式。创建模式就是要建立新的物体编辑模式的意思是,场景里面已经有物体了,我们要对场景里面的物体重新编辑,我们就需要使用编辑模式来修改如我们才在场景里米娜创建了一个名字为box宽度是5,高度是5,厚度是10,横向分段为3,竖向分段为3,纵向分段为6。的一个polyCube。我们要将横向段数修改为6。我们可以执行下面的操作polyCube-e-nbox-sw6;我们运行上面的脚本,发现场景里面的polyCube已经被修改。大家在执行编辑模式下一定要注意亮点,第一点是我们要在编辑模式下制定编辑对象的名称。第二点,执行编辑操作每次只能修改一个参数,如果你希望要即修改它的宽度又修改它的高度的话,就需要执行两条编辑语句。否则mel会认为这是语法错误在我们执行了polyCube-e-nbox-sw6;后mel编辑器返回//Result:Valuesedited.//这并不是显示返回值,而是告诉我们执行编辑操作成功。如果我们要查询场景中现有物体的段数的话,我们就可以通过-q来进行查询,我们还以上面的使用的场景为例,我们要查询场景中名为box的polyCube的横向段数我们要执行如下操作polyCube-q-swbox;大家注意在查询模式下我们一次只可以查询一个参数,另外我们要将查询物体的名字放在后面,这里可以省去-n。如果我们要查询场景中选择的物体的参数而不用手动的输入我们要查找对象的名称。我们可以通过ls-sl来执行我们要的操作,方法如下:{string$s[]=`ls-sl`;print`polyCube-q-sw$s[0]`;}在上面的脚本中我们首先定义了一个字符串数组变量$s通过ls-sl将选择的物体作为列表放入数组中。然后通过print打印polyCube-q-sw$s[0]的返回值。因为我们后面跟着的是一个查询参数命令所以我们要用键盘波浪线下面的``将这个命令括起来。查询命令一次只能查询一个参数,因此我们要在查询变量数组中加入我们要查询的对象数组标注,我们查询选择的第一个物体,所以我们数组标注为$s[0].以上我们所将的这些命令都是祈使型命令,还有函数型命令。函数型的用法规则如下polyCube(-sh,5,-n,box);在函数型命令中我们要把参数用括号括起来。每一个字符都要加上引号,后面加上逗号在跟着数值,数值不属于字符所以不用加引号。同样我们用祈使型命令来建立相同对象polyCube-sh5-nbox;上面的祈使型命令和函数型命令运行的结果是相同的。他们的进行对比,我们可以看到在写法上完全不同。但是他们最大的区别并不是在表面的写法上而是在他们的返回值上,如我们要使用祈使型命令返回值作为数组写法如下string$s[]=`polyCube-sh5-nbox`;而我们需要用键盘波浪线下面的``将祈使型命令括起来使用,如果我们使用函数型返回值作为数组参数的话就不用通过``来将函数型命令括起来,我们可以直接使用,如下string$s[]=polyCube(-sh,5,-n,box);另外在跟大家说一下在mel中的注释。我们在执行一段非常长的mel的时候可能会写几百行或者上千行的语句,如果我们需要对语句进行修改的话,我们每行去找的话想对就比较麻烦,我们可以在写完一个mel段之后为这个mel段加入一个注释,说明此段是做什么的,能起到什么效果。注释常用的方法有两种第一种是//在mel中遇见//mel就会忽略//后面到整个行尾的语句,我们可以在//后面填写此段mel是做什么用的起到什么效果,方便我们查询。另外一种方法是/*注释内容*/这种注释方法的好处是可跨行,在表达式编辑器里面不可以使用此种方法。作业:用mel创建三个球体分别为半径为5径向段数为10纬向段数为12名字为a半径为3径向段数为8纬向段数为14名字为b半径为6径向段数为12纬向段数为16名字为c用鼠标将他们放置在场景里的不同位置编写mel将所选择的球体(不考虑多选的情况下)的径向段数修改为20编写mel打印出所选择的球(不考虑多选的情况下)的半径值---------------------------------------------------------------结束语:mel的学习需要大家多多练习,这样才能找出mel的惯性定律和思维方式,希望大家踊跃参与maya的学习,努力完成作业
本文标题:maya语言mel文本教学第三课-简单的命令和语法
链接地址:https://www.777doc.com/doc-5833323 .html