Autodesk Maya 中的 setAttr 函数

setAttr function in Autodesk Maya

我仍在学习 Python Maya。我无法让我的代码工作。我正在尝试创建一个定位器并将其作为我选择的父级,然后将定位器转换归零。

import maya.cmds as cmds

sel = cmds.ls(selection = True)
loc = cmds.spaceLocator()
cmds.parent(loc, sel)
cmds.setAttr(loc, "translateX", 0)

我总是收到此错误消息:

#Error: TypeError: file <maya console> line 7: Invalid argument 1, '[u'locator6']'. Expected arguments of type ( list, )

有时我会得到一些其他代码:

#There does not exist something with name 'translateX'

我知道当我用定位器的名称替换 loc 时它确实有效,但我尽量使代码尽可能通用,而不是绑定到定位器的名称。

setAttr 函数在 Maya 中如何使用变量? Maya 文档和各种论坛上的其他问题无法帮助...:/

setAttr 以一个完整的属性作为参数:

 cmds.setAtt( loc + ".translateX", 0)  

其中 loc 必须是单个字符串。 spaceLocator 与大多数创建命令一样 returns 一个列表,而不是单个字符串。所以整个事情是:

sel = cmds.ls(selection = True)
loc = cmds.spaceLocator()
cmds.parent(loc, sel)
cmds.setAttr(loc[0] + ".translateX", 0)

我知道您似乎在询问 Maya cmds,但我想加入这个作为替代方案。

在 PyMel 中,spaceLocator 函数 returns 创建的对象本身。这些属性是对象内部的方法,允许您执行以下操作。我喜欢 PyMel 的原因之一!

import pymel.core as pm

sel = pm.selected()[0]
loc = pm.spaceLocator()
pm.parent(loc, sel)
loc.translateX.set(0)