MEL 是什麼?
MEL (Maya Embedded Language) 是 Maya 的內建腳本語言,它是一種解釋型語言,類似於 C 語法的子集。

MEL 的主要用途:
- 自動化重複性任務: 為一個角色的所有骨骼創建控制器。
- 創建自定義工具和界面: 開發自己的工具欄、視窗和滑塊,以簡化工作流程。
- 擴展 Maya 功能: 執行 Maya 標介面中沒有的特定操作。
- 學習 Maya 的底層運作方式: 幾乎你在 Maya 中的任何操作(移動、縮放、創建物體等)都會生成一段對應的 MEL 代碼。
如何使用 MEL?
打開 MEL 命令輸入視窗
這是使用 MEL 最直接的方式。
- 菜單路徑:
Windows > General Editors > Script Editor - 在 Script Editor 中,選擇 MEL 標籤。
- 或者,直接點擊 Maya 界面底部狀態欄旁邊的 Cmd 或 Python 圖標旁的下拉箭頭,選擇 MEL,這會打開一個單行的 MEL 命令輸入欄。
執行 MEL 腳本
- 單行命令: 在 MEL 輸入欄中輸入命令,按 Enter (回車) 執行。
- 多行腳本: 在 Script Editor 的 MEL 標籤中,你可以輸入多行代碼,選擇代碼後,可以點擊工具欄的 執行 按鈕,或使用快捷鍵
Ctrl + Enter。
MEL 基礎語法
MEL 的語法類似於 C++ 和 Java,如果你有編程基礎會比較容易上手。
變數
使用 string、int、float、vector 等關鍵字聲明變數。

// 聲明字串變數 string $objectName = "pSphere1"; // 聲明整數變數 int $count = 10; // 聲明浮點數變數 float $size = 5.5; // 聲明向量變數 (用於 X, Y, Z 坐標) vector $pos = <<1, 2, 3>>;
數組
MEL 有兩種主要的數組類型:固定大小數組和動態數組。
// 固定大小數組
int $fixedArray[3] = {1, 2, 3};
// 動態數組 (可以隨時改變大小)
string $dynamicArray[];
$dynamicArray[0] = "apple";
$dynamicArray[1] = "banana";
$dynamicArray[2] = "orange";
運算子
- 算術運算子: , , , , (取餘數)
- 關係運算子: (等於), (不等於),
>,<,>=,<= - 邏輯運算子:
&&(且), (或), (非)
條件語句
int $score = 85;
if ($score >= 90) {
print "Grade: A\n";
} else if ($score >= 80) {
print "Grade: B\n";
} else {
print "Grade: C or below\n";
}
迴圈
// for 迴圈
for ($i = 0; $i < 5; $i++) {
print "Iteration: " + $i + "\n";
}
// while 迴圈
int $j = 0;
while ($j < 5) {
print "Count: " + $j + "\n";
$j++;
}
程式
將程式碼封裝成一個可重複使用的模組。
// 定義一個名為 "createSphere" 的程式
global proc createSphere(string $name, float $radius)
{
// 創建一個球體
string $sphere = `sphere -radius $radius -name $name`;
// 輸出創建的物體名稱
print ("Created sphere: " + $sphere + "\n");
}
// 呼叫程式
createSphere("myBall", 2.0);
常用 MEL 命令參考
以下是一些最常用和最強大的 MEL 命令,分類整理:
物體創建與操作
| 命令 | 功能 | 範例 |
|---|---|---|
sphere |
創建球體 | sphere -radius 2 -name "myBall"; |
cube |
創建立方體 | cube -width 3 -height 3 -depth 3; |
cylinder |
創建圓柱體 | cylinder -radius 1 -height 5; |
select |
選擇物體 | select "pSphere1"; select -cl; (清除所有選擇) |
move |
移動物體 | move 5 0 0; (沿 X 軸移動 5 單位) |
rotate |
旋轉物體 | rotate 0 45 0; (繞 Y 軸旋轉 45 度) |
scale |
縮放物體 | scale 2 2 2; (將物體放大兩倍) |
delete |
刪除物體 | delete "pSphere1"; |
duplicate |
複製物體 | duplicate -rr; (遞迴複製,包含子級) |
查詢與設定屬性
| 命令 | 功能 | 範例 |
|---|---|---|
getAttr |
獲取物體屬性值 | float $tx =getAttr "pSphere1.translateX" |
setAttr |
設定物體屬性值 | setAttr "pSphere1.translateX" 10; |
listAttr |
列出物體的所有屬性 | listAttr "pSphere1"; |
attributeExists |
檢查屬性是否存在 | attributeExists "visibility" "pSphere1"; |
選擇與群組
| 命令 | 功能 | 範例 |
|---|---|---|
ls |
列出選取的物體或場景中的物體 | ls -sl; (列出選取的物件) ls -long; (列出所有物件詳細資訊) |
group |
將選取的物件群組 | group "pSphere1", "pCube1"; |
parent |
設定物體的父級 | parent "pCube1" "pSphere1"; (將立方體設為球體的子級) |
ungroup |
取消群組 | ungroup "group1"; |
場景與檔案操作
| 命令 | 功能 | 範例 |
|---|---|---|
file |
儲存、匯入、匯出場景 | file -save -type "mayaBinary"; file -import -type "OBJ" "path/to/model.obj"; |
currentTime |
設定當前時間 | currentTime 24; (跳到第 24 幀) |
playbackOptions |
控制播放選項 | playbackOptions -minTime 0 -maxTime 120; (設定播放範圍) |
程式控制與界面
| 命令 | 功能 | 範例 |
|---|---|---|
print |
在命令行列印訊息 | print "Hello, Maya!"; |
confirmDialog |
彈出確認對話框 | confirmDialog -title "Confirm" -message "Are you sure?" -button "Yes" -button "No"; |
window |
創建自定義視窗 | window -title "My Tool" -width 300 -height 200 myToolWindow; |
showWindow |
顯示自定義視窗 | showWindow myToolWindow; |
學習 MEL 的最佳實踐
從記錄器開始
這是最強大的學習工具!

- 打開 Script Editor (
Windows > General Editors > Script Editor)。 - 確保 History 標籤被選中。
- 在 Maya 中執行任何操作(創建一個球體,移動它,縮放它)。
- 你會在 History 視窗中看到對應的 MEL 代碼,這是學習命令語法和參數的最直接方式。
善用 help 命令
Maya 的 MEL 幫助系統非常詳細。
- 在 MEL 輸入欄中輸入
help命令,後面跟著你想了解的命令。 - 範例:
help move - 這會打開 Maya 的文件,該命令的詳細說明、語法和範例。
理解選擇機制
幾乎所有的 MEL 命令都會對當前選取的物件進行操作,在執行命令前,確保你已經正確地選中了目標物件,或者使用 select 命令明確指定。
使用變數和程式來管理腳本
不要寫很長的單一腳本,將其分解為有邏輯的程式,並使用變數來儲存中間結果,這樣你的代碼會更清晰、更易於維護和重複使用。
MEL vs. Python
現代 Maya 開發更推薦使用 Python,但 MEL 仍然有其重要性。
| 特性 | MEL (Maya Embedded Language) | Python for Maya |
|---|---|---|
| 整合性 | 原生整合,是 Maya 的核心語言,啟動時就已載入。 | 需要透過 maya.cmds 模組呼叫 Maya 命令。 |
| 執行速度 | 對於簡單、直接的命令,執行速度通常更快。 | 對於複雜的數學計算和邏輯處理,速度更快。 |
| 語法 | C 風格,語法較為嚴格和冗長。 | 語法簡潔、易讀,功能強大。 |
| 第三方庫 | 僅限 Maya 內建功能。 | 可以使用龐大的 Python 生態系統(NumPy, Pandas, Matplotlib 等)。 |
| 學習曲線 | 對於沒有編程經驗的藝術家可能更易上手。 | 需要學習 Python 語言本身,但長遠價值更高。 |
結論:
- 快速、簡單的任務:使用 MEL 或單行 Python。
- 複雜的工具開發、自動化腳本、數據處理:強烈推薦使用 Python。
- 修改 Maya 的 UI (修改標準選喈):通常必須使用 MEL。
希望這份指南能幫助你開始你的 MEL 學習之旅!
