求助:编写Maya脚本获取选中对象Channel Box可用属性
问题分析与修正
你的脚本存在几个关键问题导致无法正常运行:
mc.listAttr(usersel)默认返回对象的所有属性,包含通道盒不显示的隐藏/不可关键帧属性,无法直接得到通道盒可见属性- 循环内判断逻辑错误:
"rotateX" ==1是字符串与数字的无效比较,永远为False,应该判断当前遍历的属性x是否等于目标属性 - 未处理多对象选中的情况,原脚本会把所有对象的属性混在一起,输出逻辑混乱
修正后的脚本
要获取通道盒中显示的属性,需给listAttr添加keyable=True(通道盒默认显示的可关键帧属性)和visible=True参数,同时修正判断逻辑:
import maya.cmds as mc # 获取选中的顶级节点,shortNames=False避免短名歧义 usersel = mc.ls(sl=True, dag=False, shortNames=False) if not usersel: print("请先选中对象") else: # 逐个处理选中的对象 for obj in usersel: # 筛选通道盒可见的可关键帧属性 channel_attrs = mc.listAttr(obj, keyable=True, visible=True) print(f"对象 {obj} 的通道盒属性:") for attr in channel_attrs: # 判断当前属性是否为rotateX if attr == "rotateX": print(f" - {attr}: yes") else: print(f" - {attr}: not")
关键说明
keyable=True:筛选出可设置关键帧的属性,这是通道盒默认显示的核心属性集合visible=True:确保属性在通道盒中处于可见状态(部分可关键帧属性可能被手动隐藏)- 增加空选中判断,避免无对象时触发报错
- 针对每个选中对象单独输出,结果更清晰直观
内容的提问来源于stack exchange,提问作者flys
相关产品推荐
相关产品推荐

