最好的方法還是買書自己學,可以參考《Maya動畫師MEL腳本編程全攻略》(以前看過,很快就能上手)。
附上我以前學習的壹些筆記,希望能給妳壹些幫助:
1.得到所有被選中對象的列表並存入數組:“string $sel[] = `ls -sl`;”
2.在表達式中可以直接用“=”給對象的屬性賦值或取值;而mel中則必須通過getAttr和setAttr來實現,這種方式效率比較低
3.“==”是判斷是否相等;“!=”不等於
4.定義變量:“float $rotation_value;”
5.為對象添加屬性:Window-->Attribute Editor;Attributes-->Add Attribute
6.在數學表達式中的向量:可以對向量中的單個分值賦值,如:$abc.x=3;但是不可以這樣賦值:$abc=<<$abc.x,1,1>>
7.向量運算(Maya中的點都是向量存儲,因此要定位的話向量比較重要):向量相減:代表向量從壹個點移到另壹個點所需行進的方向和距離,減數指向被減數
8.向量操作:unit(格式化)/unit($vectoer1);mag(長度)/mag($vectoer1);angle(夾角,弧度制,如果想獲得角度將它乘以180/pi,方向為逆時針)/angle($vector1l,$vector2);cross(叉積,與兩個向量正交,即垂直的第三個向量,其長度為:dot運算)/cross($vector1l,$vector2);dot(=mag($vector1)*mag($vector2)*cos(angle($vector1,$vector2)))/($vector1l,$vector2);rot(將壹個向量繞著由另壹個向量所定義的軸旋轉壹定的角度)/rot($vector1,$vector_axis,$degrees)
9.檢測兩個向量平行或垂直:dot(unit($vector1),unit($vector2)),如果=0,那麽垂直;如果=1,那麽平行
10.在mel語言中,不能把屬性值賦給變量,必須用如下格式獲得:$val=`getAttr expression1.time`;
11.連接屬性:connectAttr 屬性1 屬性2
12.創建表達式:express -string "屬性1=值";;適用於mel中對屬性的賦值
13.變量:數組變量/$t={1,2,3};聲明變量/int $t;
14.全局變量:Maya要求在每壹個使用全局變量的域中重新聲明該變量,如:
global int $a=1;
proc print_a(){
global int $a;
print($a);
}
print_a();
15.將壹個整數轉換為壹個浮點數:float(3);;將浮點數轉換為整數:int(3.7),結果為向下取整=3
16.算術比較運算:print(5>6);結果為:0或1
17.運算符:+,-,*,/,%,+=,-=,*=,/=,++,--,&&,||,!
18.取相鄰最大整數:ceil($f);取相鄰最小整數:floor($f)
19.在mel中的向量:不能直接將壹個值賦給向量的壹個分量,如:$abc.x=3;必須這樣賦值:$abc=<<$abc.x,1,1>>
20.分隔字符串:tokenize "string1" $myarray;得到的結果將是以空白符來拆分字符串,並存入數組中;又:tokenize "string1" "char" $myarray;將得到以char來拆分字符串,並存入數組中
21.數組中所有沒有被賦值的元素默認為0
22.數組的尺寸:size($myarray)
23.如果需要在腳本中使用壹個非常的數組,在結束時使用mel中的clear命令清楚該數組:clear $myarray
24.模式選擇:-c標記或不適用標記將選擇創建模式;-q選擇查詢模式;-e選擇編輯模式
如:sphere -q -radius nurbsSphere1 返回半徑
sphere -e -radius 15 nurbsSphere1 修改半徑
25.當希望存儲命令的返回值時,可以在賦值運算的右邊將命令置入反引號(``)中。如:string $coneNodeNames[]=`cone -name testing2`
26.使用eval命令:string $spherecommand="sphere"; string $nodenames[]=eval($spherecommand);表示創建壹個球體,將sphere命令的返回值存入$nodenames數組中
27.在腳本中有三種運行mel命令的方法:(壹)如果不關心返回值,作為獨立壹行的語句獨立運行;(二)如果想將返回值存入壹個變量,將其放入反引號中;(三)如果想在字符串中構造命令並執行它,使用eval函數命令。