mel这个东西靠教程光明白是远远不够的,一定要多加练习,这样不断的总结经验教训才能有所提高。
数组也分 整数数组,小数数组,字符串数组
其实数组就好比我们在maya场景中选择了多个对象打组是一个道理,在mel中我们可以将数字和字符串进行打组后进行统一操作
如整数数组里面可能有很多数字 1 3 5 7 0 等,可以理解为将这些数字打了一个组
小数数组也是如此 1.2 3.6 6.8 3.4 将这四个数字进行了打一个组
字符串数组 就是将字母或者字符串打组 hi hello maya ok 将这四个单词打组
数组在mel中的表示方式如下,我以整数数组为例
{
int $a [] = {3, 13, 17,37};
print $a;
}
上面我们做了一个整数数组的简单表达方式。int上节课讲过是代表整型变量 定义一个整型变量a在a的后面有一个[]意思就是告诉系统这个变量是一个数组,在等号后面大括号中的内容就是这个数组的内容。大家可以执行这条语句看看maya的反馈信息是是如何显示的,我们使用print反馈数组信息,得到数组列表。
但是如果我们要调用数组中的单独的某一个数字我们该怎么操作呢?这就需要我们执行数组下标操作。大家要注意数组我们上面写的数组语句中的数组内容标号是从0开始的。也就是说{3, 13, 17,37}数组中第一个数字3的下标为0以此类推,13的下标为1等等。
如果我们要调用上面数组中的第三个数字17,我们要执行如下操作
{
int $a [] = {3, 13, 17,37};
print $a[2];
}
大家在mel执行上面的语句后反馈结果为17,这个结果是我们想要的
同样我们也可以对数组重新赋值,这个道理就好比是,我们在maya场景中建立一个空组,在这个空组中我们可以随意的添加和更换组中的元素是一个道理
{
int $a [] = {3, 13, 17,37};
print $a;
}
上面这个语句我们只是对这个数组的初始化,好比我们在maya场景中建组,组中已经包含了这些对象,我要更换这个组里面的内容我们要执行如下操作
{
int $a [] = {3, 13, 17,37};
$a = {47,98,103,111};
print $a;
}
我们在mel中执行上面的语句,发现我们将变量$a数组的原内容3,13,17,37更改为47,98,103,111。如果我们只想更改数组中的其中一个数值的话我们可以进行如下操作
{
int $a [] = {3, 13, 17,37};
$a[2] = 8;
print $a;
}
我们执行上面的语句发现我们已经将数组中的第三个数字17,改为了数字8。如果我们要删除数组中的某一个数字的话,我们可以执行如下操作
{
int $a [] = {3, 13, 17,37};
$a = {3,13,37};
print $a;
}
执行上面的操作我们就将数组中的17删除掉了。如果我们要查看数组中第四个数字的话,我们执行下面的语句
{
int $a [] = {3, 13, 17,37};
$a = {3,13,37};
print $a[3];
}
在mel中的反馈值为0,因为经过我们的更改删除了数组中的17,因此就没有了第四个数字,这个数组中只有三个数字。所以反馈值为0。
同样小数数组和字符串数组也是同样道理
小数数组如下
{
float $a [] = {3.1, 13.5, 17.2,37.3};
print $a;
}
字符串数组如下
{
string $a [] = {"maya", "ok", "autodesk","good"};
print $a;
}
如果在我们数组中存在非常多的数字和字符串,我们需要统计数组内元素的数量的时候我们可以通过size的操作来完成,如下
{
string $a [] = {"maya", "ok", "autodesk","good"};
print `size $a`;
}
执行上述操作,mel反馈值为 4。注意在print打印反馈值后面我使用了`size $a`。因为size是一个命令,所以我们在使用命令执行另一个命令的时候或者将命令作为字符串定义的时候需要用``将命令标注起来。这个符号就是键盘波浪线下面的点。
如果想清空数组,我们可以通过执行clear的操作来执行清空数组,使用方法如下
{
string $a [] = {"maya", "ok", "autodesk","good"};
clear $a;
print `size $a`;
}
大家执行上面的语句,我们使用print `size $a`;打印返回值,返回值为0,说明数组已经被清空。
使用字符串数组应有操作的比较多,可以通过字符串数组提取场景中的元素列表
我们在场景中建立四个球体,分别命名为 a b c d。我们可以通过字符串数组将选择的球体打印出名字。我们执行如下操作
{
string $a [] = `ls -sl`;
print $a;
}
我们选择场景中的 a b c d 的任何一个或者多个球体,执行上面的语句就能将我们选择的球体名称打印出来。其中在上面的语句中我使用了ls -sl 这个命令,这个命令的意思就是,选择的对象元素的意思,因为maya场景中的对象命名都是本身就是字符,选择多个对象,所以我们要使用字符串数组。