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 版权声明

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

加载中…

发布评论