使用Mel对Maya进行扩展开发
/ / 点击 / 阅读耗时 7 分钟介绍
最近学习了一下Maya的Mel语言进行扩展开发,这里简单记录整理一下相关笔记
关于Mel
MEL 是来源于 UNIX 壳脚本的一种语言。因此,MEL 在很大程度上是依靠执行命令来完成操作,而不像其他语言那样操纵数据结构、调用函数或使用面向对象的方法。
用于控制 Maya 的大多数命令类似于 UNIX 命令行实用程序:通过许多选项来修改自身行为的独立小程序
概述
指定和值
MEL 中的指定运算符是等号 (=)。MEL 还具有类似于其他语言的快捷指定运算符(+=、-=、/=、*=、++、–等)。
声明一个变量时,便同时声明了其类型,并可以选择指定一个初始值。
变量名称以 $ 开头,后面带一个字母,然后是包含字母/数字/下划线的任意组合。所有类型的变量(标量和复合)均以 $ 开始。
MEL 具有常用整数、浮点和 字符串数据类型。它还包含向量数据类型,这是浮点的三元值、数组和矩阵。数组中的所有项目必须是同一类型。
1 | int $a = 5; |
注意: 无法在 MEL 中创建数组的数组。 MEL 会尽可能自动转化类型。
控制及循环语句和运算符
1 | //比较$a和$b,并根据结果执行不同的操作 |
定义和调用
1 | global proc <return type> <name>(<arg list>) { |
注释
MEL 使用前面带有 // 行注释,以及由 /* 和 */ 包围的自由形式注释。
容易出问题的地方
MEL 中的每个语句必须以分号 (;) 结束,对于{}中的语句同样适用会导致犯错
1 | if ($a > $b) {print("Hello");}; |
与某些相比(Node.js,Python),声明一个可返回值的表达式并不会自动在 MEL 中打印值。会导致错误
1 | 3 + 5; |
利用Mel进行创建,编辑,查询
1 | // 创建一个名为“mySphere”、半径为5的球体 |
使用命令语法,可以省略单字字符串周围的引号,并使用空格而不是逗号来分隔参数
1 | setAttr("mySphere1.translateX",10); // Function syntax |
函数语法会自动返回值。若要使用命令语法获取返回值,必须将命令扩在反引号中
1 | $a = getAttr("mySphere.translateX"); // Function syntax |