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 這個按鈕,他就應該出現控制選單,如下圖:
不過,你可能會收到錯誤訊息:
// 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; 看看如果只跑一個欄位,到底可不可以 (因為我實在看不出錯誤) ,果然可以成功! 那表示語法都正確! 如下圖:
所以只剩下一個我還看不懂的: 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 選單不能正確顯示說明圖片,像下圖左這樣空空如也:
那可能是因為你安裝 script 的路徑跟這支 MEL 內寫的預設路徑不同,他預設的圖片路徑大概是這樣:
- 我的文件/maya/2013-x64/scripts/cMakerImages/
由於 MEL scripts 放在好幾個地方都能被正確執行,可是圖片只能放在一個地方,所以你可以檢查一下,把你的圖片放到這個路徑。
還是不行的話,就到 cMakerSetupUI.mel 檔案,在第 22 行 print 一下 $scriptDir 這個變數,看看到底他希望你把圖片放在哪?然後把圖片複製過去就可以了。
Leave a Reply