mcpField
U
unity-animator

unity-animator

github.com/besty0728开发1.9k84 次安装今天更新
代码仓库

关于 unity-animator

面向 Unity 开发者的 Animator 技能模块,可创建和配置 Animator Controller、状态与过渡,并读取或驱动动画参数。

主要功能

  1. 01创建 Animator Controller
  2. 02管理状态、过渡和参数
  3. 03将控制器分配给 GameObject
  4. 04读取 Animator 信息与状态
  5. 05运行时设置参数并播放状态

适用场景

  1. 01搭建角色动画状态机
  2. 02配置动画层和状态过渡
  3. 03运行时触发动画参数或状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/besty0728/unity-skills --skill unity-animator

安装后在 Claude Code 中输入/unity-animator确认已加载。

详细介绍

**调用本模块中的任何技能前:**如果你准备根据技能名称或描述猜测参数后调用技能,请停止——先阅读此文件(或通过 GET /skills/recommend?includeSchema=true 获取其 schema)。如果你已从 recommend/schema 获取参数定义,则可直接进行 dryRun。

触发条件

  • 设置或连接 Animator
  • 调整动画状态机
  • 在运行时驱动动画参数
  • 搭建或连接 Animator、调整动画状态机、运行时驱动动画参数

Unity Animator 技能

控制 Unity 的 Mecanim 系统——创建 Animator Controller、添加层的状态 / 转换 / 参数、将控制器分配给 GameObject、在运行时设置参数,以及播放状态。

操作模式

  • Approval:查询类技能(animator_get_parameters / animator_get_info / animator_list_states,源码标记为 SkillMode.SemiAuto)直接执行;其余变更类(create_controller / add_parameter / set_parameter / play / assign_controller / add_state / add_transition,标记为 SkillMode.FullAuto)需要用户授权,授权后由服务端一步执行并返回结果。
  • Auto / Bypass:所有技能均直接执行;Auto 由 AI 自行评估,Bypass 则全部放行。
  • 本模块不包含 Delete / PlayMode / Reload / 高危技能,也没有仅 Bypass 可拦截的项目。
  • animator_set_parameter / animator_play 作用于场景中已挂载 Animator 的 GameObject;如果当前不在 Play mode,状态机只会在 Editor 预览模式下推进,效果与 runtime 并不完全相同。

切勿(常见幻觉):

  • animator_create_clip / animator_add_clip 不存在 → AnimationClips 通过 Unity Editor 或资源导入创建
  • animator_set_speed 不存在 → 对 Animator 组件使用 component_set_property,并将 propertyName="speed"

路由:

  • 对于 Timeline 动画 → 使用 timeline 模块
  • 对于 Animator 上的组件属性 → 使用 component 模块
  • 对于动画导入设置 → 使用 importer 模块

技能概览

技能描述
animator_create_controller创建新的 Animator Controller
animator_add_parameter向控制器添加参数
animator_get_parameters列出所有参数
animator_set_parameter在运行时设置参数值
animator_play播放动画状态
animator_get_info获取 Animator 组件信息
animator_assign_controller将控制器分配给 GameObject
animator_list_states列出控制器中的状态
animator_add_state向控制器层添加状态
animator_add_transition在两个状态之间添加转换

参数类型

类型描述示例用途
float小数值速度、混合权重
int整数值状态索引
bool真 / 假IsGrounded、IsRunning
trigger单次触发信号Jump、Attack

技能

animator_create_controller

创建新的 Animator Controller。

参数类型必填默认值描述
namestring是-控制器名称
folderstring否"Assets/Animations"保存文件夹

返回值:{success, name, path}

animator_add_parameter

向控制器添加参数。

参数类型必填默认值描述
controllerPathstring是-控制器资源路径
paramNamestring是-参数名称
paramTypestring否floatfloat/int/bool/trigger
defaultFloatfloat否0初始 float 值
defaultIntint否0初始 int 值
defaultBoolbool否false初始 bool 值
animator_get_parameters

获取控制器中的所有参数。

参数类型必填描述
controllerPathstring是控制器资源路径

返回值:{controller, parameters: [{name, type, defaultFloat, defaultInt, defaultBool}]}

animator_set_parameter

在运行时设置参数值(支持 name/instanceId/path)。

参数类型必填描述
namestring否*GameObject 名称
instanceIdint否*GameObject 实例 ID
pathstring否*GameObject 层级路径
paramNamestring是参数名称
paramTypestring否float/int/bool/trigger(默认值:float)
floatValuefloat否*浮点值
intValueint否*整数值
boolValuebool否*布尔值

*至少需要一个标识符。请根据 paramType 使用相应的值(trigger 不需要值)。

animator_play

播放指定的动画状态(支持 name/instanceId/path)。

参数类型必填默认值描述
namestring否*-GameObject 名称
instanceIdint否*0GameObject 实例 ID
pathstring否*nullGameObject 层级路径
stateNamestring是-动画状态名称
layerint否0Animator 层
normalizedTimefloat否0起始时间(0-1)

*至少需要一个标识符。

animator_get_info

获取 Animator 组件信息(支持 name/instanceId/path)。

参数类型必填默认值描述
namestring否nullGameObject 名称
instanceIdint否0GameObject 实例 ID
pathstring否nullGameObject 层级路径

返回:{gameObject, instanceId, hasController, controllerPath, speed, applyRootMotion, updateMode, cullingMode, layerCount, parameterCount}

animator_assign_controller

为 GameObject 指定控制器(支持 name/instanceId/path)。

参数类型必填描述
namestring否*GameObject 名称
instanceIdint否*GameObject 实例 ID
pathstring否*GameObject 层级路径
controllerPathstring是控制器资源路径

*至少需要一个标识符。

animator_list_states

列出控制器层中的所有状态。

参数类型必填默认值描述
controllerPathstring是-控制器资源路径
layerint否0层索引

返回:{controller, layer, layerName, stateCount, states: [{name, tag, speed, hasMotion}]}

animator_add_state

向 Animator Controller 层添加状态。

参数类型必填默认值描述
controllerPathstring是-控制器资源路径
stateNamestring是-新状态的名称
clipPathstring否null要指定的动画剪辑资源路径;如果路径指向的不是 AnimationClip,则会在添加状态前拒绝调用
layerint否0层索引

返回:{success, controller, stateName, layer}

animator_add_transition

在 Animator Controller 的两个状态之间添加过渡。

参数类型必填默认值描述
controllerPathstring是-控制器资源路径
fromStatestring是-源状态名称
toStatestring是-目标状态名称
layerint否0层索引
hasExitTimebool否true过渡是否等待退出时间
durationfloat否0.25过渡时长(秒)

返回:{success, from, to, layer, hasExitTime, duration}


示例:完整动画设置

import unity_skills

# 1. Create controller
unity_skills.call_skill("animator_create_controller",
    name="PlayerController",
    folder="Assets/Animations"
)

# 2. Add parameters
unity_skills.call_skill("animator_add_parameter",
    controllerPath="Assets/Animations/PlayerController.controller",
    paramName="Speed", paramType="float", defaultFloat=0
)
unity_skills.call_skill("animator_add_parameter",
    controllerPath="Assets/Animations/PlayerController.controller",
    paramName="IsGrounded", paramType="bool", defaultBool=True
)
unity_skills.call_skill("animator_add_parameter",
    controllerPath="Assets/Animations/PlayerController.controller",
    paramName="Jump", paramType="trigger"
)

# 3. Assign to character
unity_skills.call_skill("animator_assign_controller",
    name="Player",
    controllerPath="Assets/Animations/PlayerController.controller"
)

# 4. Control at runtime
unity_skills.call_skill("animator_set_parameter",
    name="Player", paramName="Speed", paramType="float", floatValue=5.0
)

# Trigger jump
unity_skills.call_skill("animator_set_parameter",
    name="Player", paramName="Jump", paramType="trigger"
)

# Play specific state
unity_skills.call_skill("animator_play", name="Player", stateName="Idle")

最佳实践

  1. 添加参数前先创建控制器
  2. 使用有意义的参数名称
  3. 触发后,触发器会自动重置
  4. 播放状态前设置参数
  5. 使用图层播放独立动画(身体 + 面部)
  6. 播放状态前,控制器中必须存在这些状态

精确签名

确切的名称、参数、默认值和返回值由 GET /skills/schema 或 unity_skills.get_skill_schema() 定义,而非此文件。

评论

支持 Markdown