如何将自定义属性连接到节点输入?

2024-05-13 18:20:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我终于在最后的游戏助手联合脚本我正在工作,只有最后一个问题站在我的方式。剧本应该是怎么起作用的。创建一个关节,将其命名为“父关节”,然后在“节点编辑器”(node editor)中创建一个“multDoubleLinear”节点,将其命名为“bob”,选择创建的关节后单击“加载父关节”,然后单击“添加属性”。在一个我在这个问题上更聪明的理想世界中,添加到关节的自定义属性将插入bob的“input1”,而我得到一个错误消息:“error:找不到源属性‘Parent_joint_HelperJntAttr’。”

根据我已经尝试过的方法,我将connectAttr放在addAttr下面,因为常识会要求在连接属性之前必须首先创建属性:但是尽管如此,它还是拒绝连接。我知道错不在鲍勃输入1“node,因为它只为'Parent_Joint_HelperJntAttr:打开前缀属性名:所以我猜测这只是我在编写这个特定过程时缺乏知识。在

import maya.cmds as cmds
if cmds.window(window, exists =True):
    cmds.deleteUI(window)

window = cmds.window(title='DS Attribute adder')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)

def set_textfield(_):
    sel = cmds.ls(selection=True)
    cmds.textField(sld_textFld, edit=True, text=sel[0])

load_button = cmds.button( label='Load Parent Joint', c = set_textfield)

def add_Attribute(_):
   text_value = cmds.textField(sld_textFld, q = True, text=True)
   if text_value:
       print "attrAdded:" 
       cmds.addAttr(ln=text_value +'_HelperJntAttr', defaultValue=5.0, minValue=0, attributeType='float', keyable=True)

       cmds.connectAttr( text_value +"_HelperJntAttr", 'bob.input1')

   else:
       cmds.warning("select an object and add it to the window first!")

node_button = cmds.button( label='add attribute', c = add_Attribute)
cmds.showWindow(window)

我知道如何在maya中对默认属性使用connectAttr命令,但我不太明白的是自定义属性。我的希望是我知道如何编写代码来创建和连接关节的自定义属性。提前感谢您的帮助


Tags: textaddnodetrue属性valuebuttonwindow
1条回答
网友
1楼 · 发布于 2024-05-13 18:20:14

使用addAttr的方式是在属性名中包含关节的名称。属性用.分隔,而不是_,因此您的connectAttr也因此失败。在

您还需要将window变量初始化为某个默认值,否则它将在您检查它是否存在的行上失败(但是window在那一点上没有定义)。在

下面是添加属性并按预期连接它的脚本:

import maya.cmds as cmds

window = "" # Need to initialize this variable first or it crashes on next line.

if cmds.window(window, exists =True):
    cmds.deleteUI(window)

window = cmds.window(title='DS Attribute adder')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)


def set_textfield(_):
    sel = cmds.ls(selection=True)
    cmds.textField(sld_textFld, edit=True, text=sel[0])


load_button = cmds.button( label='Load Parent Joint', c = set_textfield)


def add_Attribute(_):
   text_value = cmds.textField(sld_textFld, q = True, text=True)
   if text_value:
       print "attrAdded:" 
       # Attribute must be created this way.
       cmds.addAttr(text_value, ln='HelperJntAttr', defaultValue=5.0, minValue=0, attributeType='float', keyable=True)

       # Attribute is separated with a dot.
       cmds.connectAttr(text_value + ".HelperJntAttr", 'bob.input1')
   else:
       cmds.warning("select an object and add it to the window first!")


node_button = cmds.button( label='add attribute', c = add_Attribute)
cmds.showWindow(window)

相关问题 更多 >