Maya选择脚本求助:选中角色所有可关键帧控制器(去除引用名)
Maya 角色全动画控制器选择脚本
以下是适配你需求的Python脚本,可快速选中当前角色所有可设置关键帧的控制器,并自动去除引用角色的命名空间前缀:
import maya.cmds as cmds def select_all_anim_controllers(): # 获取当前选中对象(带完整路径) selected = cmds.ls(selection=True, long=True) if not selected: cmds.warning("请先选中目标角色的任意控制器或Locator!") return # 提取角色命名空间前缀 namespace = "" for obj in selected: if ":" in obj: namespace = obj.split(":")[0] + ":" break # 筛选同角色的控制器/Locator if namespace: controllers = cmds.ls(f"{namespace}*", type=["nurbsCurve", "locator"]) else: controllers = cmds.ls(type=["nurbsCurve", "locator"]) # 过滤可设置关键帧的对象并清理命名空间 valid_controllers = [] for ctrl in controllers: # 检查是否有可关键帧属性 has_keyable = cmds.listAttr(ctrl, keyable=True) has_keyframes = cmds.keyframe(ctrl, query=True, keyframeCount=True) if has_keyable or has_keyframes: # 去除命名空间前缀 clean_name = ctrl.split(":")[-1] if ":" in ctrl else ctrl valid_controllers.append(clean_name) # 去重并选中目标控制器 if valid_controllers: cmds.select(list(set(valid_controllers)), replace=True) print(f"已选中 {len(valid_controllers)} 个可动画控制器") else: cmds.warning("未找到符合条件的可动画控制器!") # 执行脚本 select_all_anim_controllers()
关键逻辑说明
- 命名空间识别:自动从选中对象提取角色引用前缀,确保只选中当前目标角色的控制器,不会误选其他引用角色。
- 可动画验证:通过检查对象的可关键帧属性(
keyable=True)或已存在的关键帧,过滤掉不可动画的辅助节点。 - 名称清理:自动去除控制器名称中的角色前缀(如
Hero:arm_CTRL转为arm_CTRL),符合动画师日常操作习惯。
使用方式
- 在Maya中选中目标角色的任意控制器或Locator;
- 将脚本复制到Maya脚本编辑器的Python标签页;
- 点击运行按钮即可完成全选。
内容的提问来源于stack exchange,提问作者Jonathan Vandrepotte
相关产品推荐
相关产品推荐

