Maya脚本报错:如何获取仍处于选中状态的隐藏对象名称?
Maya 2024 切换选中对象可见性脚本修复
问题根源
你遇到的// Error: No object matches name: .visibility报错,本质是对象被隐藏后,视图中的选中状态会自动失效,此时ls -selection返回空数组,执行getAttr $sel.visibility就变成了getAttr .visibility,自然找不到对应属性。
修复后的脚本
下面的脚本会处理空选中、多对象场景,同时确保即使对象处于隐藏状态也能正确获取选中目标:
// 模拟 Display > Show Selection / Hide Selection 功能 string $sel[] = `ls -selection -showHidden`; // 强制获取包括隐藏对象在内的选中项 if (size($sel) == 0) { error "请先选中对象!"; } for ($obj in $sel) { // 检查对象是否存在visibility属性(避免形状节点等特殊情况) if (`attributeExists "visibility" $obj`) { bool $isVisible = `getAttr ($obj + ".visibility")`; if ($isVisible) { setAttr ($obj + ".visibility") 0; } else { setAttr ($obj + ".visibility") 1; } } }
关于Maya「显示/隐藏选中对象」的实现逻辑
Maya的Display > Show Selection和Display > Hide Selection底层逻辑是:
- 先通过
ls -selection -showHidden获取所有选中对象(包括隐藏状态的) - 遍历每个对象,直接修改其
visibility属性:隐藏时设为0,显示时设为1 - 隐藏对象在视图中无法保持选中状态,因此必须通过
-showHidden参数强制获取选中项
额外说明
- 原脚本中
HideSelectedObjects和ShowSelectedObjects是Maya内置命令,但它们依赖视图选中状态,对象隐藏后会失效,不如直接操作属性可靠 - 加入
attributeExists检查是为了避免选中形状节点(比如mesh的shape)时出错,部分形状节点的可见性由父变换节点控制
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

