关于 unity-component
unity-component 是一组用于操作 Unity 游戏对象组件的技能,面向需要检查或修改组件的工作流。它涵盖组件增删、复制、启用状态切换及字段读写,并提供批量操作与序列化字段验证。
主要功能
- 01添加、移除和复制组件
- 02切换组件启用状态
- 03读取组件方法和属性
- 04编辑 C# 与序列化字段
- 05批量处理并验证更改
适用场景
- 01为游戏对象添加或移除组件
- 02在对象之间复制组件配置
- 03检查或更新序列化字段
- 04批量修改多个对象的组件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-component安装后在 Claude Code 中输入/unity-component确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/component_add_batch.mdcomponent_add.mdcomponent_copy_exact.mdcomponent_copy.mdcomponent_get_methods_batch.mdcomponent_get_methods.mdcomponent_get_properties.mdcomponent_get_serialized_properties.mdcomponent_invoke_method_batch.mdcomponent_invoke_method.mdcomponent_list.mdcomponent_remove_batch.mdcomponent_remove.mdcomponent_set_enabled.mdcomponent_set_property_batch.mdcomponent_set_property.mdcomponent_set_serialized_property_batch.mdcomponent_set_serialized_property.md详细介绍
触发条件
- 挂载或移除组件
- 在对象间复制组件
- 切换组件的启用状态
- 读取/写入序列化字段
- 挂载或移除组件、在对象间复制组件、切换组件的启用状态、读写序列化字段
Unity 组件技能
添加、移除、复制、切换组件的启用状态并编辑组件。参数来自架构(建议使用 includeSchema=true 或 /skills/schema?names=),其中会说明不明显的参数——不要根据技能名称推断。执行、dryRun 和验证规则:参阅根目录中的 SKILL.md。
操作模式
component_list、component_get_methods、component_get_methods_batch、component_get_properties、component_get_serialized_properties 属于 SemiAuto(只读);所有写入操作均属于 FullAuto。component_remove / component_remove_batch(Operation.Delete)和 component_invoke_method*(高风险)在 Semi 模式下禁止:在 Approval/Auto 模式下会返回 MODE_FORBIDDEN,只能在 Bypass 模式下运行,或命中 Allowlist → 操作模式。
通用规则
- 目标:单对象技能接受
name、instanceId或path(以及可解析为路径的entityId),匹配规则与 GameObject 相同:模糊名称有多个匹配项时返回带有candidates的TARGET_NOT_FOUND;非精确匹配会列在resolutionNotes中。批处理项只接受name/instanceId/path:entityId项键会被忽略(并在warnings中注明),因此该项找不到目标。component_copy*使用source*/target*标识符。 componentType(必填):类名——Rigidbody、BoxCollider,自定义脚本则使用Namespace.ClassName。首先搜索 Unity、UI、TextMeshPro、Cinemachine 和 Input System 命名空间,然后进行不区分大小写的扫描并采用第一个匹配的类型;响应中的component/fullTypeName会显示解析出的类型。- 两套命名方案:
component_set_property/component_get_properties使用 C# 成员名称(mass、isKinematic;不区分大小写匹配,私有字段也可写入)。component_get_serialized_properties/component_set_serialized_property使用 SerializedProperty 路径(m_Mass、items.Array.data[0];裸名称mass会再次尝试匹配m_Mass)。转换时,去掉m_并将首字母改为小写;将m_名称传给component_set_property会失败并提示 "Property/field not found",同时列出可写入成员。 - 值来源(
component_set_property、其批处理接口、batch_preview_set_property):以下来源必须且只能提供一个,按assetPath(项目资源)>referencePath(按路径指定场景对象)/referenceName(按名称指定,取第一个匹配项)>value的顺序检查;同时提供优先级较低的来源时会被静默忽略。不提供任何来源时,会写入该类型的默认值(0 / false / null)。 value编码:数字和布尔值(true/false、1/0、yes/no、on/off;其他值会被拒绝)可使用 JSON 或字符串;枚举使用成员名称,不区分大小写;向量、Quaternion(3 个值 = 欧拉角,4 个值 = xyzw)、Rect(x,y,w,h)和 Bounds(cx,cy,cz,sx,sy,sz)使用逗号分隔的字符串("1,2,3");颜色可使用"r,g,b[,a]"(取值范围 0–1)、#RRGGBB[AA]或名称(red、green、blue、white、black、yellow、cyan、magenta、gray/grey、clear);LayerMask 可使用层名称或整数掩码。JSON 对象形式({"x":1,"y":2,"z":3}、{"r":1,"g":0,"b":0})仅适用于 Vector2/3/4 和 Color/Color32,且必须包含每个分量(颜色a默认为 1;显式的null视为缺失);部分对象、未知键和非数字值会被拒绝,并指出预期的键。- 回读:
component_set_property会返回从组件读取的valueSet;只有在 setter 对值进行了截断或规范化时,才会返回valueRequested。component_set_serialized_property会在应用更改后重新读取。无需后续读取。 - 属性/添加/移除批处理:全部成功或全部失败——任何一项失败都会回滚整个调用(
rolledBack:true,其他项标记为reverted:true);未知项键会列在warnings中。
技能概览
调用批次是非原子异步任务;详情请参阅:方法调用。
| 单项 | 批次 |
|---|---|
component_add | component_add_batch |
component_get_methods | component_get_methods_batch |
component_invoke_method | component_invoke_method_batch |
component_remove | component_remove_batch |
component_set_property | component_set_property_batch |
component_set_serialized_property | component_set_serialized_property_batch |
不支持批次:component_list(类型和启用状态)、component_get_properties(C# 成员和值)、component_get_serialized_properties(Inspector 路径)、component_copy、component_copy_exact(验证每个序列化字段)、component_set_enabled(开启或关闭 Behaviour/Renderer/Collider — 并非 component_set_property)。
各技能的表格、条目字段和返回结构:reference/<skill_name>.md — 通常不需要,架构说明中已有参数信息。
请勿(常见臆造):
component_create/component_get并不存在 → 使用component_add(添加)和component_get_properties(读取)component_find并不存在 → 使用component_list列出对象上的组件
精确签名
名称、参数、默认值和必填标记来自 GET /skills/schema?category=Component(或 ?names=a,b),而非此文件。
常见错误
| 错误 | 触发条件 → 修复方法 |
|---|---|
TARGET_NOT_FOUND | 对象、组件类型、对象上的组件、成员或资源不存在 → 使用 component_list、component_get_properties、asset_find、gameobject_find。 |
MISSING_PARAM | 例如 componentType、propertyName、propertyPath → 提供该参数;错误信息(或 dryRun)会列出所有参数。 |
SEMANTIC_INVALID | 目标类型不接受某个 value、componentIndex 超出范围、某组件仍被另一个组件依赖(requiredBy:先移除这些组件),或批次中的某项执行失败 → 根据消息 / results 修复。 |
SKILL_ERROR | 只读属性 → 选择可写成员。 |
传输代码(COMPILING、RATE_LIMIT 等)→ 错误代码。