为Unity-Skills开发新技能:[UnitySkill]特性、反射注册与参数校验全解

发布时间:2026/10/11 16:13:23

为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),仅供参考
延伸阅读

更多相关文章

2026/10/11 16:13:23

SSH、limits、systemd、logrotate、crontab:运维必懂配置文件实战解析

这个系列聊到第二篇。上一篇讲的主要是系统初始化阶段那些“开机就得对”的配置,比如挂载表、主机名、环境变量之类。今天想换个角度,专门挑几个日常运维里出场率最高、也最容易让新手翻车的“重要配置文件”来拆一遍——SSH 的 sshd_config 、资源限制…

2026/10/11 16:13:23

共形阵列波束控制与测向算法实战指南

简介:本资源是一份面向雷达、通信与电子对抗领域研究生及工程师的学术研究型文档,聚焦共形阵列天线在实际平台(如飞行器、导弹弹体)中面临的波束控制与测向难题。针对半圆柱阵和圆环阵两类典型构型,系统提出应对遮蔽效…

2026/10/11 17:13:26

光伏仿真软件PVSYST实操指南:从组件建模到发电量预测

简介:这是一份PVSYST光伏系统设计软件的入门操作教程PPT,适合光伏系统设计人员、新能源专业学生及零基础学习者,用于快速掌握从项目选址、组件排布、参数设置到发电量模拟的完整流程。教程为单个PPT文件,约2.88MB,内容…

2026/10/11 17:13:26

基于4000张杂草数据集的YOLO训练与田间部署实战

简介:这份资源面向从事农业智能识别、计算机视觉方向的学生与算法工程师,提供一套可直接投入训练的YOLO杂草检测数据集,用于解决田间杂草与作物区分、目标检测模型训练等实际问题。压缩包共约2000个文件,以xml格式的VOC标注文件为…

2026/10/11 17:13:26

WIDER FACE B大目标子集:VOC/YOLO转换与YOLOv8训练实战

简介:面向近距离大目标人脸检测的WIDER Face数据集B子集,共8188张jpg图片,对应8188个VOC格式xml与8188个YOLO格式txt标注,类别仅face,所有标注框像素面积大于3500,总计14649个框,能有效降低远距…

2026/10/11 17:13:26

智慧教室行为识别:专注度分析与作弊检测的深度学习实战

简介:这份资源是面向计算机相关专业学生与项目实战学习者的毕业设计源码包,聚焦智慧教室场景下的课堂专注度分析与考试作弊检测,基于深度学习技术实现,适合用作毕设、课程设计或期末大作业的参考方案。压缩包共626个文件&#xff…

2026/10/11 17:08:26

鸿蒙PC应用迁移:ca-certificates证书信任库适配与TLS握手实战

1. 项目背景与整体适配思路1.1 为什么鸿蒙PC上需要ca-certificates适配做鸿蒙PC应用迁移的朋友,大概率都撞过同一堵墙:某个依赖TLS通信的老应用,在Linux或Windows上跑得好好的,一搬到鸿蒙PC上,直接报“证书验证失败”或…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑