MAYA 經驗隨記 005 – Crowd Maker 0.6.0 ( MEL Script ) 的小修正

簡述

Crowd Maker 是一個很簡單的 MEL Script ,功能是簡易的群體動畫。請參考 Creative Crash 網頁:

但是你會發現新版的 MAYA 不能用,出現錯誤訊息是:

  • // Error: file: cMakerCreationUI.mel line 226: Controls must have a layout. No layout found in window

我的 Maya2013 當然也很不客氣的把這段文字甩給我。

可能不少人就卡在這裡了,不過可能有更多人直接投靠 Massive Prime?(笑)

好吧! 到底發生什麼問題呢?


問題描述

理想上,只要你選取粒子 → Locator → NURBS平面,然後按下Create cMakerCreationUI 這個按鈕,他就應該出現控制選單,如下圖:

 723

不過,你可能會收到錯誤訊息:

// Error: file: cMakerCreationUI.mel line 226: Controls must have a layout. No layout found in window

我打開 cMakerCreationUI.mel , 找到 226 行,雖然我的 MEL 功力不怎麼樣,叫我寫可能寫不出來,但是要看懂還是 OK 的 ,所以我就開始看了…

但這才是頭大的開始XD,因為 … 我比對了半天 … 發現 … 他的語法都很標準,很正確啊! 我甚至打開線上 MEL 文件,把各個命令搜索一下,原作者撰寫的格式都跟範例一樣的標準!

這究竟…

而且,如果你仔細查看,你不覺得很詭異嗎? 第 226 行是

string $txtSep= `text -label “Separation”`;

就算這樣寫有問題,但是前面還有個

string $txtObstacle= `text -label “Obstacle Avoidance”`;

同樣是賦予欄位文字,他沒出問題啊?換言之,第二次要給予文字內容的時候會出錯,雖然不能肯定正確原因,但是可以圍繞這邊測試。 (各位讀者可以比對最下面我節錄的部分程式碼,一起比對看看)

找解

我試過改換排列,就是把下面的  formLayout –edit 相關命令 直接重新安排到每個 text 後面,看看是不是新版的 MEL 語法、次序被修改了。但是換了幾種組合,都不行,而且我一一確認過 window、text、radioCollection、radioButton、formLayout,語法參數都正確無誤。然後我又逐行複製,一行一行貼入 MEL 直譯器內測試,一直都沒有問題。

然後我試著在第一段結束的地方執行   showWindow cMakerCreateWindow;  看看如果只跑一個欄位,到底可不可以 (因為我實在看不出錯誤) ,果然可以成功! 那表示語法都正確! 如下圖:

 722-3

所以只剩下一個我還看不懂的: setParent,看來罪魁禍首就是他了,查看了 線上手冊 setParent ,嗯 … 沒全弄懂 … 管他的 … 先把它註解掉,看看新的錯誤長啥樣子?

這一註解,就找到正確答案了! XD 很好,錯誤跳到下一筆文字所在,第 233 行,這實在太顯然啦! 那…正解就是 把全部的 setParent ..; 註解掉,就可以用了!

總計五處: 第 224、231、238、245、253  行。

下面是這段程式碼的節錄,僅供各位參考,其所有權屬於原作者 adry 喲!

global proc cMakerCreationUI() {

// Create the window.
  if (`window -exists cMakerCreateWindow`) 
    deleteUI cMakerCreateWindow;

  window 
    -widthHeight 300 300 
    -title "CrowdMaker 0.6 beta 3" 
    cMakerCreateWindow;

  string $form= `formLayout`;

  string $txtObstacle= `text -label "Obstacle Avoidance"`;
  string $collection1= `radioCollection`;
  string $radiob1, $radiob2;
  $radiob1= `radioButton -label "On"`;
  $radiob2= `radioButton -label "Off" -en 0`;
//  setParent ..; setParent ..;
// 就是這裡啦! ↑ ↑ ↑ ↑  把他們都註解掉吧!
  string $txtSep= `text -label "Separation"`;
  string $collection2= `radioCollection`;
  string $radiob3, $radiob4;
  $radiob3= `radioButton -label "On"`;
  $radiob4= `radioButton -label "Off" -en 0`;
//  setParent ..; setParent ..;

... 以下省略 ....

祝大家使用愉快! 製作成千上萬的虛擬大軍吧!

 

補充一個後記

如果你回頭發現 Crowd Maker 的 setup 選單不能正確顯示說明圖片,像下圖左這樣空空如也:

734

 

那可能是因為你安裝 script 的路徑跟這支 MEL 內寫的預設路徑不同,他預設的圖片路徑大概是這樣:

  • 我的文件/maya/2013-x64/scripts/cMakerImages/

由於 MEL scripts 放在好幾個地方都能被正確執行,可是圖片只能放在一個地方,所以你可以檢查一下,把你的圖片放到這個路徑。

還是不行的話,就到 cMakerSetupUI.mel 檔案,在第 22 行 print 一下  $scriptDir 這個變數,看看到底他希望你把圖片放在哪?然後把圖片複製過去就可以了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料