mcpField
U
unity-event

unity-event

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

关于 unity-event

unity-event 是用于管理 UnityEvent 持久监听器的 Unity 技能模块,适合在 Inspector 中配置按钮、Toggle 等事件回调。它可检查、添加、修改、调用、复制或移除监听器。

主要功能

  1. 01查看组件上的 UnityEvent
  2. 02读取监听器及其数量
  3. 03添加、修改或移除持久监听器
  4. 04批量添加或复制监听器
  5. 05设置监听器状态或运行时调用

适用场景

  1. 01为按钮配置持久回调
  2. 02检查事件当前绑定的方法
  3. 03在多个事件间复制监听器
  4. 04运行时显式触发 UnityEvent

安装

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

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

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

详细介绍

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

触发条件

  • 在 Inspector 中挂接 UnityEvents
  • 连接按钮或触发器回调
  • 编写持久监听器脚本
  • 在 Inspector 里挂接 UnityEvent、连接按钮或触发器回调、脚本化持久监听

事件技能

检查和修改 UnityEvent 上的持久监听器(例如 Button.onClick、Toggle.onValueChanged)——也就是你在 Inspector 的事件投放槽中看到的那些监听器。

操作模式

  • Approval:查询类技能(event_get_listeners / event_list_events / event_get_listener_count,源码标记为 SkillMode.SemiAuto)直接执行;其余变更/调用类技能(event_add_listener / event_set_listener / event_set_listener_state / event_invoke / event_add_listener_batch / event_copy_listeners,标记为 SkillMode.FullAuto)需要用户授权,授权后由服务端一步执行并返回结果。
  • Auto / Bypass:未被禁用列表拦截的技能直接执行。
  • 本模块包含 Delete 类技能:event_remove_listener、event_clear_listeners 标记为 SkillOperation.Delete,会被 IsForbiddenInSemi 静态拦截——仅在 Bypass 模式下或加入 Allowlist 后才能调用。
  • event_invoke 仅在 Play mode / runtime 下有效;编辑器空跑时仅会触发 EditorAndRuntime 监听器。event_add_listener 等写入的是持久监听器(序列化到 prefab/scene),因此可在编辑器中配置。

请勿(常见幻觉):

  • event_create / event_trigger 不存在 → UnityEvents 在组件源代码中声明;本模块仅负责连接监听器
  • event_subscribe 不存在 → 使用 event_add_listener
  • event_remove 不存在 → 使用 event_remove_listener
  • event_add_listener 要求目标上的组件类型和方法名完全匹配

路由:

  • XR 交互事件 → 使用 xr 模块的 xr_add_interaction_event
  • C# 事件代码 → 通过 script 模块编写

技能

event_get_listeners

获取 UnityEvent 的持久监听器。

参数类型必填默认值说明
namestring否nullGameObject 名称
instanceIdint否0GameObject 实例 ID
pathstring否nullGameObject 层级路径
componentNamestring是-组件名称
eventNamestring是-事件字段名称(例如 "onClick")

返回: { success, gameObject, component, eventName, listenerCount, listeners }

event_add_listener

向 UnityEvent 添加持久监听器(编辑器时)。

参数类型必填默认值说明
namestring否nullGameObject 名称
instanceIdint否0GameObject 实例 ID
pathstring否nullGameObject 层级路径
componentNamestring是-所属事件的组件
eventNamestring是-事件字段名称(例如 "onClick")
targetObjectNamestring是-存放要调用方法的 GameObject
targetComponentNamestring否null目标上的组件;或使用 GameObject 调用对象本身
methodNamestring是-公共方法或 set_PropertyName
modestring否RuntimeOnlyOff、RuntimeOnly 或 EditorAndRuntime
argTypestring否voidvoid、int、float、string 或 bool
floatArgfloat否0静态 float 参数
intArgint否0静态 int 参数
stringArgstring否null静态 string 参数
boolArgbool否false静态 bool 参数

返回: { success, message, index, mode }

与 event_set_listener 不同,此技能没有 object 类型的 argType——它仅支持标准的 UnityEvent 重载。

event_remove_listener

按索引移除一个持久化监听器。

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject 名称
instanceIdintNo0GameObject 实例 ID
pathstringNonullGameObject 层级路径
componentNamestringYes-组件名称
eventNamestringYes-事件字段名称
indexintNo0监听器索引

返回: { success, remainingCount }

event_invoke

显式调用 UnityEvent(仅限运行时)。

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject 名称
instanceIdintNo0GameObject 实例 ID
pathstringNonullGameObject 层级路径
componentNamestringYes-组件名称
eventNamestringYes-事件字段名称

返回: { success, message }

event_clear_listeners

移除 UnityEvent 的所有持久化监听器。

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject 名称
instanceIdintNo0GameObject 实例 ID
pathstringNonullGameObject 层级路径
componentNamestringYes-组件名称
eventNamestringYes-事件字段名称(例如 "onClick")

返回: { success, removed }

event_set_listener_state

设置监听器的调用状态(Off、RuntimeOnly、EditorAndRuntime)。

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject 名称
instanceIdintNo0GameObject 实例 ID
pathstringNonullGameObject 层级路径
componentNamestringYes-组件名称
eventNamestringYes-事件字段名称
indexintNo0监听器索引
statestringNonull调用状态:"Off"、"RuntimeOnly" 或 "EditorAndRuntime"

返回: { success, index, state }

event_set_listener

替换指定索引处的持久化监听器。

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject 名称
instanceIdintNo0GameObject 实例 ID
pathstringNonullGameObject 层级路径
componentNamestringYes-源组件名称
eventNamestringYes-事件字段名称
indexintNo0要替换的监听器索引
targetNamestringYes-目标 GameObject 名称
targetInstanceIdintNo0目标 GameObject 实例 ID
targetPathstringNonull目标层级路径
targetComponentNamestringNonull目标组件名称,或 GameObject
methodNamestringYes-公共方法或 set_PropertyName
modestringNoRuntimeOnlyOff、RuntimeOnly 或 EditorAndRuntime
argTypestringNovoidvoid、int、float、string、bool、object
floatArgfloatNo0静态 float 参数
intArgintNo0静态 int 参数
stringArgstringNonull静态 string 参数
boolArgboolNofalse静态 bool 参数
objectReferenceNamestringNonull场景对象参数名称
objectReferenceInstanceIdintNo0场景对象参数实例 ID
objectReferencePathstringNonull场景对象参数路径
objectAssetPathstringNonull项目资源参数路径
objectTypestringNonull对象参数的对象/组件类型

返回: { success, index, target, targetType, method, state, argType }

event_list_events

列出组件上的所有 UnityEvent 字段。

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

返回: { success, component, count, events }

event_add_listener_batch

一次添加多个监听器。items:包含 {targetObjectName, targetComponentName, methodName} 的 JSON 数组。

参数类型必填默认值描述
namestring否nullGameObject 名称
instanceIdint否0GameObject 实例 ID
pathstring否nullGameObject 层级路径
componentNamestring是-组件名称
eventNamestring是-事件字段名称
itemsstring是-包含 {targetObjectName, targetComponentName, methodName} 的 JSON 数组

返回: { success, added, total }

event_copy_listeners

将监听器从一个事件复制到另一个事件。

参数类型必填默认值描述
sourceObjectstring是-源 GameObject 名称
sourceComponentstring是-源组件名称
sourceEventstring是-源事件字段名称
targetObjectstring是-目标 GameObject 名称
targetComponentstring是-目标组件名称
targetEventstring是-目标事件字段名称

返回: { success, copied }

event_get_listener_count

获取 UnityEvent 上持久化监听器的数量。

参数类型必填默认值描述
namestring否nullGameObject 名称
instanceIdint否0GameObject 实例 ID
pathstring否nullGameObject 层级路径
componentNamestring是-组件名称
eventNamestring是-事件字段名称

返回: { success, count }


精确签名

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

评论

支持 Markdown