1

所以我想在 Maya 中从组和定位器节点中创建一个非常简单的结构,然后将其导出以用于我的游戏关卡。

例如

Group_Root
  group_parent
    - group1
      - locator1
    - group2
      - locator2
    - group3

文件中只有一个 Group_Root,有许多 group_parents(每个都有唯一的名称)但是所有 group_parent 都有相同的三个子组名称(“group1”、“group2”、“group3”),并且所有 group1 都有一个名为 locator1 的定位器

到目前为止,我所拥有的是:

group_parent = c.group( em=True, name="group_parent", parent="Group_Root")
modes =  ["group1", "group2", "group3"]
for mode in modes:
    mode_group = c.group( em=True, n=mode, parent=group_parent )
    if mode == "group1":
            s = c.spaceLocator(name="locator1")
            c.parent( mode_group ) 
    elif mode == "group3":
            s = c.spaceLocator(name="locator2")
            c.parent( mode_group )

但是我在“c.parent(mode_group)”处收到此错误

# 错误:对象 group1 无效

大概是因为有多个名为“group1”的节点,所以它不知道哪个是父节点。

知道如何使用完整路径执行此操作吗?例如“Group_Root|group_parent|group1”

4

3 回答 3

0

我猜它已经两年多了,你现在已经弄清楚了这个......但对于后代来说,有两个问题 - 首先,你需要绝对路径,但也有一点应用 maya.cmds.parent() 调用方式的错误。我刚刚做了一些简单的重写来说明 - 主要是你可以使用这样一个事实,即当你创建东西时,它们会默认被选中,并且 maya.cmds.ls() 足够聪明,可以返回你需要的东西.. Ergo:

c.group( em=True, name="group_parent", parent="Group_Root")
group_parent = c.ls(sl=True)[0]

modes =  ["group1" , "group2", "group3"]
for mode in modes:
    c.group( em=True, n=mode, parent=group_parent )
    mode_group = c.ls(sl=True)[0]
    if mode == "group1":
            c.spaceLocator(name="locator1")
            s = c.ls(sl=True)[0]
            # maya.cmds.parent() with something selected will actually
            # parent the specified object to the selected object. 
            # You don't want that.


            # We might as well use the explicit syntax to be sure 
            # (parent everything specified to the last item in the list)
            c.parent( s, mode_group ) 
    elif mode == "group3":
            c.spaceLocator(name="locator2")
            s = c.ls(sl=True)[0]
            c.parent( s, mode_group )
于 2012-10-06T09:54:34.797 回答
0

你见过视觉特效溢出吗?这是视觉效果的问答,所以我希望一些观察者对 Maya/MEL 和 Python 非常熟悉。也就是说,它是相当新的,所以用户群仍然很小......

于 2010-01-20T01:17:53.057 回答
0

MEL 的名称可能有点烦人。一般来说,最好不要相信名称就是您指定的名称。

这是一个如何*不做事的好例子:

group -n myGroup1 circle1 sphere1;

..因为这决不能保证会产生名为“group1”的东西。更好的方法是运行您的命令并将结果捕获到字符串变量中,例如:

string $result = `group -n myGroup circle1 sphere1`;

然后,使用 $result 来引用结果组。即使该组最终被称为“myGroup23”,这仍然有效。

我不确定上面在 Python 中的样子,因为我主要熟悉直接 MEL,但应该适用相同的原则。

另一件需要关注的是命名空间功能(命名空间和命名空间信息),它可以用来为手头上唯一的顶级组定义一个新的命名空间。

希望有帮助

于 2011-03-23T20:56:32.443 回答