You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),符合动画师日常操作习惯。

使用方式

  1. 在Maya中选中目标角色的任意控制器或Locator;
  2. 将脚本复制到Maya脚本编辑器的Python标签页;
  3. 点击运行按钮即可完成全选。

内容的提问来源于stack exchange,提问作者Jonathan Vandrepotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:20:30