为Unity-Skills开发新技能:[UnitySkill]特性、反射注册与参数校验全解
【免费下载链接】Unity-SkillsAI automation skills specifically designed for Unity项目地址https://gitcode.com/gh_mirrors/un/Unity-Skills点击查看免费下载Unity-Skills 是一个让 AI 通过本地 REST API 直接操控 Unity 编辑器的自动化技能框架内置 805 个技能覆盖场景、脚本、资产、光照等场景。想让它学会你的独门操作只需三步写一个静态方法 → 贴上[UnitySkill]特性 → 框架通过反射自动注册并暴露为 REST 接口。本文带新手一次走通 [UnitySkill] 特性、反射注册与参数校验的完整开发链路。一个技能的生命周期从方法到 REST 接口在动手之前先理解新技能被看见的完整链路编写静态方法 [UnitySkill] 特性 ↓ SkillRouter.Initialize() 反射扫描TypeCache ↓ 构建技能注册表名称、参数、风险元数据 ↓ GET /skills/schema 可查签名POST /skill/name 可执行 ↓ 参数校验必填 / 类型 / 保留参数 / 语义规则→ 执行或 dryRun 报告好消息是你只负责第一步后面全部由框架自动完成。前置条件是把包装进项目Unity 2022.3在 Package Manager 中添加com.besty.unity-skills即可写好 [UnitySkill] 特性一次声明所有元数据技能特性的定义在 UnitySkillAttribute.cs。它只能标记在公共静态方法上第 84-85 行字段可分为三组1️⃣ 基础字段字段作用Name技能的 REST 名称如cleaner_find_unused_assets不填则按方法名转蛇形命名Description技能描述AI 检索时的重要线索TracksWorkflow是否参与工作流快照追踪2️⃣ 意图层元数据供 AI 路由与推荐Category所属模块对应 SkillCategory 中的 54 个分类GameObject、Material、Cleaner…Operation操作类型Query / Create / Modify / Delete / Execute / Analyze可组合Tags语义标签影响recommend意图检索的召回Outputs/RequiresInput产出与依赖的关键字段用于技能间的数据串联RequiredParams强制必填的参数即使 C# 签名给了默认值ReadOnly是否纯查询、无副作用3️⃣ 风险与影响元数据决定治理层行为MutatesScene/MutatesAssets是否改场景或磁盘资产MayTriggerReload/MayEnterPlayMode是否触发编译重载或进出播放模式LongRunning长耗时同步操作提示 AI 不要误判为超时重试RiskLevellow默认/medium/highModeSkillMode 权限档位SemiAuto直接执行FullAuto默认在 Approval 模式下需用户授权一个真实的最小例子来自 CleanerSkills.cs[UnitySkill(cleaner_find_unused_assets, Find potentially unused assets of a specific type, Category SkillCategory.Cleaner, Operation SkillOperation.Analyze, Tags new[] { cleaner, unused, assets, dependencies }, Outputs new[] { assetType, potentiallyUnusedCount, assets }, ReadOnly true, Mode SkillMode.SemiAuto)] public static object CleanerFindUnusedAssets( string assetType Material, string searchPath Assets, int limit 100) { ... }反射自动注册SkillRouter 如何发现你的方法编辑器启动或域重载后SkillRouter.Registry.cs 中的Initialize()通过 Unity 的TypeCache.GetMethodsWithAttributeUnitySkillAttribute()一次性扫出全部技能方法无需手动维护任何注册列表。注册时会做几件关键的事过滤规则跳过非public、非static的方法——忘了static是最常见的技能消失原因参数白名单方法签名参数 保留参数verbose、offset、limit等构成AllowedParameterSet多传参数会报错而不是静默忽略构建反向索引Outputs声明的字段会建立产出字段 → 技能的映射支撑 AI 自动规划先查谁、再调谁读取参数描述从[SkillParam]特性提取每个参数的语义说明注入 schema所以给新技能起名有讲究REST 名用小写蛇形xxx_yyy动词对象asset_reimport、light_set_properties与项目内 805 个既有命名保持一致AI 才能猜得中、叫得对。参数校验三层防线让调用叫得准、错得明白参数校验逻辑集中在 SkillRouter.Validation.cs 的ValidateParameters()共三层第一层必填与类型无默认值的参数视为必填缺失进入missingParams报MISSING_PARAM有默认值的参数缺省自动填默认值想强制必填用特性的RequiredParams new[] { xxx }声明类型不匹配进入typeErrors报TYPE_MISMATCH并附期望类型特例目标是string却收到 JSON 数组/对象批量类技能的queryJson参数常见会自动序列化回字符串无损兼容第二层参数语义描述 —— SkillParam[SkillParam(...)]是给名字本身说不清含义的参数写的语义小注坐标系、单位、取值范围、与其它参数的优先级。它会作为description出现在 schema、recommend 与 dryRun 响应里是 AI 正确调参的关键。项目中的实例AssetSkills.cs[SkillParam(Unity FindAssets syntax: name substrings and/or t:Type (e.g. t:Material). Not a path or glob.)] string filter t:Material第三层保留参数与语义规则verbose必须是布尔、offset/limit/pageOffset/pageLimit有类型和最小值检查ValidateReservedBodyParameters最后由SkillPlanningService.ApplySemanticValidation执行跨参数语义规则。技能体内部还可主动校验项目约定写法是 Validate.Required见 AnimatorSkills.cs 中的大量用法if (Validate.Required(assetPath, assetPath) is object err) return err;校验结果如何被看见调用任意技能时带上?modedryRun即使参数全错也不会写任何东西只返回一份校验报告——这正是新技能上线前最好的试飞方式。上线自测三条命令验证新技能新技能编译通过后按顺序验证查注册GET /skills/schema?names你的技能名—— 能返回签名说明反射注册成功查检索GET /skills/recommend?intent关键词—— 看Tags和Description是否足够让 AI 命中它查校验POST /skill/你的技能名?modedryRun故意传错参数确认返回MISSING_PARAM/TYPE_MISMATCH而非静默通过技能发现协议与错误码全表可参考 protocol-discovery.md 与 protocol-error-codes.md整体调用约定见 SKILL.md。新手避坑清单 症状原因修复schema 里查不到技能方法不是public static或类不在 Editor 程序集内检查方法签名与 asmdef 归属AI 从不推荐你的技能Description/Tags太泛或没有用意图动词 具体对象命名补标签删类操作直接执行漏标Mode SkillMode.FullAuto或风险元数据默认FullAuto即走授权流勿手改默认dryRun 显示 valid 但执行失败技能内部Validate.Required的语义错误未声明进RequiredParams把带默认值的必填参数写进RequiredParams调用看起来卡死长耗时同步操作未标LongRunning标注后 AI 会停止误重试写在最后Unity-Skills 的技能体系把声明与注册彻底解耦你专注写好一个带注释的静态方法[UnitySkill] 特性负责风险与意图元数据TypeCache反射负责自动发现三层校验负责让每次失败都错得明白。照着本文的三步走你的第一个自定义技能比如批量重命名某类资产今天就能跑通。更多设计细节可深入阅读 SkillRouter.cs 系列分文件与 OPERATING_MODES.md。赞分享【免费下载链接】Unity-SkillsAI automation skills specifically designed for Unity项目地址https://gitcode.com/gh_mirrors/un/Unity-Skills点击查看免费下载相关推荐告别SQL注入隐患pgx 5.6 StrictNamedArgs命名参数校验新特性详解告别SQL注入隐患pgx 5.6 StrictNamedArgs命名参数校验新特性详解 在Go语言开发PostgreSQL数据库应用时SQL注入始终是悬在开数据库后端unity-mcp 中 unity_reflect 工具全解析用实时反射校验 Unity C API告别过时的训练数据unity mcp 中 unity_reflect 工具全解析用实时反射校验 Unity C API告别过时的训练数据 unity_reflect 是 unMCP 服务AI 应用游戏开发工具调用TanStack Table 特性选项映射全解析深入 TableOptions_FeatureMap 与按需特性注册机制TanStack Table 特性选项映射全解析深入 TableOptions_FeatureMap 与按需特性注册机制 TanStack Table 以 前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考