在Maya中创建层次结构



我已经为一个复制控制器/对象并将其移动到关节的工具编写了一些代码。它实际上只是将一个对象复制并移动到其他对象列表中的代码。它非常基本,但确实有效
粘贴的代码是我从其余代码中取出的片段,但如果在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

它按预期工作,但我收到了以下警告:
警告:无法为黑社会中的组件或对象设置父级
我已尝试查找此问题,但没有找到任何关于如何解决此问题的信息。但我确实知道;黑社会;是Maya中的另一个空间,它可能会导致后续问题。

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

[u'nurbsCircle1', u'makeNurbCircle1']

因此,它正在尝试将firstCtrl'nurbsCircle1'作为'makeNurbCircle1'的父级。由于'makeNurbCircle1'是一个没有变换的节点,它会发出警告,因为很明显,您不能为没有变换的对象设置父对象。

幸运的是,它很容易修复。既然我们知道它是一个列表,我们只需要为它的第一个索引做父级,如下所示:cmds.parent(offsetGrp, firstCtrl[0])

如果你想了解更多关于这个警告的信息,那么你也可以看看这个问题。

最新更新