Sigen Chang
Sigen Chang

python學習者, 現職遊戲美術 , 主要研究遊戲美術相關程式技術 , 享受創造與解決問題的過程 .

[教學]初見Maya函式return的類型

如果是對maya有興趣,為了控制maya而學習python的人,初入maya的python世界應該會一頭撞上這道牆。

### 本文章同步發布於方格子

如果是對maya有興趣,為了控制maya而學習python的人,初入maya的python世界應該會一頭撞上這道牆。

初學python的人應該也跟我一樣,會知道python有一大堆酷炫的第三方函式庫可以用,使用一段時間後自然而然就會習慣這些函式庫的使用方式,許多函式庫設計得非常智慧非常易用。但我們maya作為3D業界的標竿軟體,就是比較獨特一點…

可以先試想一下,假設要用某個函式取得被選中的圖檔的名稱,該函式正常來說該返回給你甚麼?

可以來看下列例子:

import pymel.core as pm

# 取得選擇到的物件名稱(單選) , 並print出該物件的translate屬性
obj = pm.ls(sl=True)
obj_pos = pm.getAttr(obj+".translate")
print(obj_pos)

但這時maya只會吐回來一句錯誤

# Error: TypeError: file <maya console> line 5: can only concatenate list (not "str") to list #

很顯然getAttr方法只接受字串作為參數輸入,那問題肯定出在obj身上,這時如果你用type查詢的話…

<type 'list'>

maya會告訴你他是list,這也是在英文討論區常常會看到的抱怨,maya總是會把返回的資料包在tuple或是list裡,即使一次只處理一個東西也是如此,深入之後還會發現在list裡面包tuple等等的奇怪問題。

回到程式碼,只要我們簡單修正:

import pymel.core as pm

# 加上索引值
obj = pm.ls(sl=True)[0]
obj_pos = pm.getAttr(obj+".translate")
print(obj_pos)

即可成功導出並取得參數

maya腳本編輯器成功顯示取得的參數


如果是遇到要批次處理的問題,直接使用list也沒什麼太大的問題,但切記maya很喜歡把資料型態包成list,如果程式跑不起來不仿可以朝這問題思考看看。

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论