gpt4 book ai didi

python - 对象为 "in the underworld?"是什么意思

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:55 26 4
gpt4 key购买 nike

我有这个代码:

def block_stacks(num):
stack = cmds.group(empty=True, name='Stacks#')
size = num
for var in range(num):
i = 0
r_rot = random.uniform(0,359)
block = cmds.polyCube(h=0.5, w=0.5, d=0.5, name='block#')
cmds.parent(block, stack)
cmds.move(0, 5.38 + i, 0, 'block*')
cmds.rotate(0, r_rot, 0, 'block*')
rR= random.uniform(0, 1.0)
rG= random.uniform(0, 1.0)
rB= random.uniform(0, 1.0)
cmds.polyColorPerVertex('block*', rgb=[rR,rG,rB], cdo = True)
i+=0.5

block_stacks(5)

在 Maya 的脚本编辑器中。当我运行它时,随机旋转和随机颜色工作正常, block 放置在正确的位置,但它只创建 1 个 block 而不是 5 个(就像我打算的那样)并说

"Warning: Cannot parent components or objects in the underworld."

多次。我完全不知道这意味着什么,显然整个互联网上都没有任何答案可以说明这个错误到底是什么。当我运行它时它仍然会创建对象,并且不会给出任何红色错误消息。有谁知道这意味着什么,以及为什么它只使堆栈高 1 个 block 而不是预期的 5 个 block ?我已经尝试解决这个问题将近 2 个小时了,现在我已经筋疲力尽了。

最佳答案

我认为该错误意味着您不能将 dg 节点(没有转换的东西)作为 dag 节点的父级。例如,尝试将 objectSet 设置为转换的父级。它不会让你这样做,因为 dg 节点本身没有转换并且不能属于层次结构。

现在它给你这个错误是因为你试图为立方体的 polyCube 输入设置父级,它没有转换!这是意外完成的,因为您假设 cmds.polyCube 返回立方体的转换。它不是。事实上,它返回一个包含 2 个项目的列表:立方体的变换和立方体的 polyCube 输入。由于 cmds.parent 可以在其第一个参数中接受一个列表,因此您实质上是在尝试将变换和 polyCube 作为堆栈变换的父级。您可以像这样获取命令的第一个索引来轻松避免这种情况:cmds.polyCube()[0]

现在另一个问题是所有的立方体都移动到同一个地方。这是因为您的 i 变量在 for 循环中。所以每次迭代 i 都重置为 0 而不是递增,因此它们都移动到相同的位置。

另一个问题是,在您的许多命令中,您都在使用 "block*"。这样做并不引用 block 变量,而是实际上会获取所有以名称 “block” 开头的转换。事实上,您根本不需要 "*",只需传递变量 block

考虑到所有这些,这里是工作代码:

import random
import maya.cmds as cmds


def block_stacks(num):
stack = cmds.group(empty=True, name='Stacks#')
i = 0 # Need to move this OUT of the loop otherwise it always resets to 0 and all of the blocks will move to the same place.

for var in range(num):
r_rot = random.uniform(0,359)
block = cmds.polyCube(h=0.5, w=0.5, d=0.5, name='block#')[0] # This command actually returns a list of 2 items, the transform and the polyCube input, so grab the first index.
cmds.parent(block, stack)
cmds.move(0, 5.38 + i, 0, block) # Pass the variable.
cmds.rotate(0, r_rot, 0, block)
rR = random.uniform(0, 1.0)
rG = random.uniform(0, 1.0)
rB = random.uniform(0, 1.0)
cmds.polyColorPerVertex(block, rgb=[rR, rG, rB], cdo=True)
i += 0.5


block_stacks(5)

关于python - 对象为 "in the underworld?"是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58705234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com