在 Maya 中创建层次结构

Creating a Hierachy in Maya

我已经为一个工具编写了一些代码,该工具可以复制 controllers/objects 并将其移动到关节。它实际上只是将一个对象复制和移动到其他对象列表的代码。它非常基础,但确实有效。
粘贴的代码是我从其余代码中取出的一个片段,但如果在 Maya 中 运行 则可以使用。 特别是这段代码将创建一个 nurbsCurve,将其放入一个组中,然后将该组移动到列表中的第一个对象。然后我使用一个循环再次执行此操作,然后将上一个组的 nurbsCurve 下的组作为父级,以创建一个父级层次结构。

import maya.cmds as cmds

def setZero(target):
    cmds.setAttr("%s.translateX" % target, 0)
    cmds.setAttr("%s.translateY" % target, 0)
    cmds.setAttr("%s.translateZ" % target, 0)
    cmds.setAttr("%s.rotateX" % target, 0)
    cmds.setAttr("%s.rotateY" % target, 0)
    cmds.setAttr("%s.rotateZ" % target, 0)

selJoint = cmds.ls(selection = True, shortNames = True)

firstCtrl = cmds.circle(normal =( 1,0,0))
firstGrp = cmds.group(firstCtrl)
cmds.parent(firstGrp,selJoint[0])
setZero(firstGrp)
cmds.parent(firstGrp, world = True)
#Use loop for the rest of the joints
for joint in selJoint:
    #Skip the first joint since its already done
    if joint == selJoint[0]:
        continue
    circleCtrl = cmds.circle(normal =( 1,0,0))
    offsetGrp = cmds.group(circleCtrl)
    cmds.parent(offsetGrp, joint)
    setZero(offsetGrp)
    cmds.parent(offsetGrp, world = True)
    cmds.parent(offsetGrp, firstCtrl) #Parent new offset Group to the old controller
    firstCtrl = circleCtrl #The new controller is now the target for the next offset/ctrl to be parented under

它按预期工作,但我收到此警告:
警告:不能在 underworld 中创建父组件或对象
我试过查找这个问题,但我还没有找到任何关于如何解决这个问题的信息。但我知道“地下世界”是 Maya 中的另一个 space,它可能会导致问题。

在这一行的末尾抛出警告 cmds.parent(offsetGrp, firstCtrl),如果您打印 firstCtrl,它将输出如下内容:

[u'nurbsCircle1', u'makeNurbCircle1']

所以它正在做的是尝试将 firstCtrl'nurbsCircle1' 设为 'makeNurbCircle1' 的父级。由于 'makeNurbCircle1' 是一个没有转换的节点,它会抛出该警告,因为显然你不能成为没有转换的节点。

幸运的是,它很容易修复。现在我们知道它是一个列表,我们只是作为它的第一个索引的父级:cmds.parent(offsetGrp, firstCtrl[0])

如果您想了解有关同一警告的更多信息,也可以