您可以在 Maya 中更改自定义属性的枚举列表吗?

Can you alter a Custom Attribute's enum list in Maya?

我正在向我的一些节点添加一个自定义属性,它是一个枚举列表。我可以使用 addAttr 轻松地做到这一点。但是我看不到以后添加新枚举值或更改枚举列表的方法。这可能吗?

我找到了一种方法,但似乎应该有更简单的方法。对于我的解决方法,如果该属性存在,我将获取其值并删除该属性。然后我将修改后的属性添加回节点并将其值设置为旧值。通过更改 $enumValues 我可以编辑枚举列表。 (注意我只打算添加值而不是删除值)这个脚本演示了我的解决方法:

string $attrName = "MaterialType";
string $enumValues = "Water:Sky:Terrain:Building:Road:";
string $selected[] = `ls -sl`;
if(`size $selected` == 1)
{
    string $attrFullName = $selected[0]+"."+$attrName;
    $existingValue = 0;
    if(attributeExists($attrName, $selected[0]))
    {
        $existingValue = `getAttr $attrFullName`;
        deleteAttr $attrFullName;
    }   
    addAttr -ln $attrName -at "enum" -en $enumValues $selected;
    setAttr $attrFullName $existingValue;
}
else
{
    print "You must have 1 object and only 1 object selected\n";
};

值得一提的是,如果我 运行 这个脚本确实会更改枚举的值,但这些更改不会显示在 Maya 的界面中,直到我关闭文件并重新打开文件。

任何有关如何更优雅地执行此操作的建议将不胜感激。

您正在做的 - 删除属性并重新添加 - 不幸的是,这是唯一的方法。 Maya 枚举非常蹩脚。

脚本完成后该属性应该可以正常工作 - 您可能需要取消选择并重新选择它才能正确刷新属性编辑器。您可以在脚本运行后使用对象上的 listAttr -ud 检查它 - 您应该在结果中看到您的属性名称,即使 UI 尚未刷新。

我可能来晚了一点,但您可以在 addAttr 中使用“-edit”标志。

addAttr -edit -enumNames "A:B:C" "node.enumAttrName"

但是,您仍然需要手动或使用refreshEditorTemplates

刷新

编辑: 您可能还想考虑 optionMenuGrp. You can add menuItems via the -parent flag. You can remove a specific child with the deleteUI 命令或在 optionsMenuGrp.

的编辑模式下使用 -deleteAllItems 标志删除所有子项