[教学]初见Maya函式return的类型
IPFS
### 本文章同步发布于方格子
如果是对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)
即可成功导出并取得参数
如果是遇到要批次处理的问题,直接使用list也没什么太大的问题,但切记maya很喜欢把资料型态包成list,如果程式跑不起来不仿可以朝这问题思考看看。
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!