尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

unity_docs 详解:Unity MCP 官方文档检索工具的使用与源码原理

unity_docs 详解:Unity MCP 官方文档检索工具的使用与源码原理 unity_docs 详解Unity MCP 官方文档检索工具的使用与源码原理【免费下载链接】unity-mcpUnity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.项目地址: https://gitcode.com/GitHub_Trending/un/unity-mcpunity_docs是 Unity MCP 的docs工具组中负责检索官方文档的核心工具它从 docs.unity3d.com 拉取 ScriptReference、Manual 与包文档并返回描述、参数详情、代码示例与注意事项。本文以 unity_docs 工具参考文档 为主体结合 服务端实现、单元测试 与 技能手册讲解其四种 Action、全部参数、返回结构、底层抓取与解析原理并给出与unity_reflect配合的 API 验证工作流帮助你准确、高效地为 AI 生成可靠的 Unity 代码。工具定位与适用场景unity_docs归属于docs工具组groupdocs模块路径为services.tools.unity_docs通过 Server/src/services/tools/unity_docs.py 中的mcp_for_unity_tool装饰器注册到 MCP 服务可在 manifest.json 中查看到它的注册声明。它的核心能力是从 docs.unity3d.com 获取 Unity 官方文档返回描述description、参数详情parameters、代码示例examples与注意事项caveats。推荐在unity_reflect确认某个类型确实存在之后使用用于在编写实现代码前获取用法模式、坑点与示例代码。这里体现了两个关键定位与unity_reflect互补unity_reflect通过运行时反射检查编辑器里实际存在什么 API需要 Unity 连接而unity_docs拉取官方文档怎么说不需要 Unity 连接两者构成反射 项目资产 官方文档的信任层级面向写码前验证避免 AI 在写 C# 时臆造或使用过时的 API 签名。docs工具组是可选opt-in的首次使用前需要通过manage_tools(actionactivate, groupdocs)激活详见 workflows.md。四种 Action 一览unity_docs通过action参数区分四种操作常量ALL_ACTIONS [get_doc, get_manual, get_package_doc, lookup]在源码中定义见 unity_docs.pyAction用途必填参数可选参数get_doc获取某个类或成员的 ScriptReference 文档class_namemember_name、versionget_manual获取 Unity Manual 页面slug如execution-order、urp/urp-introductionversionget_package_doc获取包文档package、page、pkg_version—lookup并行检索所有文档源ScriptReference Manual 包文档并支持批量查询query或queriespackage、pkg_version、version传入未知的action时工具会返回success: false及提示信息Unknown action xxx. Valid actions: ...这一点有对应的单元测试覆盖test_unknown_action_returns_error。get_doc类与成员的 ScriptReference 文档用于获取类如Physics、Transform或类成员如Physics.Raycast、Transform.position的脚本参考文档。内部会抓取对应 HTML 页面并通过 HTML 解析器抽取结构化内容description描述、signatures方法签名列表、parameters参数表、returns返回值说明、examplesC# 代码示例。get_manualManual 页面通过页面 slug 获取 Unity 手册文章例如脚本执行顺序execution-order、URP 介绍urp/urp-introduction。返回内容为文章标题title、按标题切分的章节sections每个章节含heading与content以及代码示例code_examples。get_package_doc包文档获取某个安装包的 manual 文档需要同时提供包名、页面与版本例如unity_docs(actionget_package_doc, packagecom.unity.render-pipelines.universal, page2d-index, pkg_version17.0)缺少package、page、pkg_version三者中的任何一个都会直接返回错误get_package_doc requires package, page, and pkg_version.。lookup多源并行检索与批量查询lookup是覆盖面最广的入口一次调用同时搜索 ScriptReference、Manual若提供了package与pkg_version还会搜索对应包文档。支持两种传参方式query单个查询queries逗号分隔的批量查询例如queriesPhysics.Raycast,NavMeshAgent,Light2D一次调用即可全部检索。一个值得注意的增强行为是当查询涉及资源关键词shader、material、texture、sprite、prefab、mesh、model、font 以及 lit/unlit/urp/hdrp/2d/3d 等时lookup还会自动检索当前 Unity 项目的资产通过manage_asset的searchaction需要 Unity 连接。例如lookup(queryLit shader)会同时返回官方文档命中和项目中匹配的 Shader/Material 资产。参数参考参数类型必填说明actionstr是要执行的文档操作get_doc/get_manual/get_package_doc/lookupclass_namestr \| Noneget_doc 必填Unity 类名如Physics、Transformmember_namestr \| None否要查询的方法或属性名versionstr \| None否Unity 版本如6000.0.38f1会自动提取 major.minorslugstr \| Noneget_manual 必填Manual 页面 slug如execution-orderpackagestr \| Noneget_package_doc 必填lookup 可选包名如com.unity.render-pipelines.universalpagestr \| Noneget_package_doc 必填包文档页面如index、2d-indexpkg_versionstr \| Noneget_package_doc 必填lookup 可选包版本 major.minor如17.0querystr \| Nonelookup 单查询单个检索词类名、主题或 slugqueriesstr \| Nonelookup 批量逗号分隔的批量检索词如Physics.Raycast,NavMeshAgent,Light2D返回结构所有操作统一返回一个包含 Unity 响应的dict具体形状随 action 变化成功找到文档时{success: true, data: {found: true, ...}}404 未找到时success仍为true但data.found false并附带suggestion提示下一步如用unity_reflect的 search 确认类型名后重试网络不可达时{success: false, message: Could not reach docs.unity3d.com: ...}。get_doc的data包含url、class、member、description、signatures、parameters、returns、examples、see_also。get_manual/get_package_doc的data包含found、url、title、sections、code_examples。lookup的data则提供聚合视图found、queries、results每条查询一个结果对象含query、hits、sources_checked以及summarytotal/found/missed统计。调用示例以下示例来自 tools-reference.md# 获取类的 ScriptReference 文档 unity_docs(actionget_doc, class_namePhysics) unity_docs(actionget_doc, class_namePhysics, member_nameRaycast) unity_docs(actionget_doc, class_nameTransform, version6000.0.38f1) # 获取 Manual 页面 unity_docs(actionget_manual, slugexecution-order) unity_docs(actionget_manual, slugurp/urp-introduction) # 获取包文档 unity_docs(actionget_package_doc, packagecom.unity.render-pipelines.universal, page2d-index, pkg_version17.0) # 单查询并行 lookup unity_docs(actionlookup, queryPhysics.Raycast) # 批量 lookup一次检索多个 API unity_docs(actionlookup, queriesPhysics.Raycast,NavMeshAgent,Light2D) # 带包文档的 lookup unity_docs(actionlookup, queryVolumeProfile, packagecom.unity.render-pipelines.universal, pkg_version17.0)底层实现原理版本号自动提取传入的version如6000.0.38f1、2022.3.45f1、6000.1.0b2会先经过_extract_version归一化为major.minor6000.0、2022.3、6000.1再拼接到文档 URL 中空值或缺失则使用无版本号的 URL见 unity_docs.py。URL 构造规则类文档https://docs.unity3d.com/{version}/Documentation/ScriptReference/{Class}.html成员文档使用点分隔{Class}.{member}.html如Physics.Raycast.html属性文档使用短横线分隔property 风格{Class}-{member}.html如Transform-position.htmlManualhttps://docs.unity3d.com/{version}/Documentation/Manual/{slug}.html包文档https://docs.unity3d.com/Packages/{package}{pkg_version}/manual/{page}.html。相关构造函数为_build_doc_url与_build_property_url均有单元测试验证 URL 形态test_build_url_class_only、test_build_property_url等。抓取与容错回退抓取基于标准库urllib请求头User-Agent: MCPForUnity/1.0超时 10 秒并通过asyncio.get_running_loop().run_in_executor放入线程池执行避免阻塞事件循环unity_docs.py。抓取包含两级智能回退成员回退成员用点分隔 URL 返回 404 时自动改用属性风格的短横线 URL 重试如Transform.position走Transform-position.html版本回退带版本号的 URL 404 时自动退回无版本 URLget_manual同样支持该回退。测试用例test_get_doc_property_fallback、test_get_doc_version_fallback、test_get_manual_version_fallback分别验证了这些路径。HTML 解析器针对两类页面使用了两套基于HTMLParser的自研解析器_UnityDocParserScriptReference抽取 description、signatures、parameters、returns、examples。它同时兼容新旧两代 Unity 文档 HTML 结构——旧版类名name-collumn/desc-collumn和新版name lbl/desc都能正确解析参数表方法签名既支持pre包裹的旧格式也支持新版signature-CS内联文本并会剥离 Declaration 前缀unity_docs.py_ManualPageParserManual / 包文档按h1标题 h2/h3章节 p段落 pre代码块切分为sections与code_examplesunity_docs.py。两个解析器在 test_unity_docs.py 中都有基于真实 HTML 样本含新旧格式的断言测试。lookup 的并发检索与项目资产联动lookup的内部流程值得单独说明unity_docs.py解析查询若查询含.且不以com.开头避免与包名混淆自动拆分为class_name.member_name例如Physics.Raycast拆为PhysicsRaycast构造并行任务同时发起 ScriptReference 查询、原大小写 Manual 查询如UIE-USS-Properties-Reference会保留原始大小写同时尝试小写版本、以及可选包文档查询asyncio.gather并行执行收集命中的hits标注来源script_ref/manual/manual_lc/package/package_lc与非致命errors资源类查询联动项目资产命中_ASSET_KEYWORDS时调用_search_assets从查询中提取非停用词如in/the/a/for/unity/using等会被过滤构造*term*搜索模式并依据关键词推断filter_type如shader→Shader、material→Material、texture→Texture2D、sprite→Sprite、prefab→Prefab、mesh→Mesh、font→Font通过manage_asset的searchaction 并行检索Assets目录每项pageSize10结果上限 15 条去重汇总统计返回summary.total / found / missed当存在未命中时会附上suggestion建议改用get_doc精确类名、get_manual正确 slug或manage_asset(actionsearch)检索 shader/material/prefab 等资源。_should_search_assets的判定在测试中也有覆盖Mesh2D shader、Lit material、URP 2D lighting、default sprite触发资产搜索而Physics.Raycast、NavMeshAgent、execution-order不触发。与 unity_reflect 配合的标准工作流Unity MCP 的技能手册给出了推荐的 API 验证四步流程workflows.md核心是反射运行时真实 API 项目资产 官方文档的信任层级# Step 1: 检索所需类型 unity_reflect(actionsearch, queryNavMesh) # → 返回匹配类型NavMeshAgent、NavMeshPath、NavMeshHit ... # Step 2: 获取类型成员摘要 unity_reflect(actionget_type, class_nameUnityEngine.AI.NavMeshAgent) # Step 3: 获取具体成员的完整签名 unity_reflect(actionget_member, class_nameNavMeshAgent, member_nameSetDestination) # → 返回参数类型、返回类型、全部重载 # Step 4: 用 unity_docs 获取官方文档与示例 unity_docs(actionget_doc, class_nameNavMeshAgent, member_nameSetDestination) # → 返回描述、签名、参数、代码示例跨版本校验场景可以显式指定版本unity_docs(actionget_doc, class_nameCamera, member_namemain, version6000.0.38f1)CLI 方式调用除 MCP 调用外服务端 CLI 也提供了文档查询入口 Server/src/cli/commands/docs.pyunity-mcp docs get Physics unity-mcp docs get Physics Raycast unity-mcp docs get NavMeshAgent SetDestination --version 6000.0其中class_name为必填位置参数member_name可选--version/-v指定 Unity 版本输出格式跟随全局配置--format。测试验证与可靠性Server/tests/test_unity_docs.py 对工具做了系统性验证可作为理解行为的依据纯函数测试版本提取完整版本、LTS、beta、空值、短版本、URL 构造类 / 成员点分隔 / 属性短横线 / 无版本解析器测试新旧两代 HTML 格式的 description、signatures、parameters、returns、examples 抽取以及空 HTML 的健壮性动作层测试未知 action 报错、必填参数校验、成功路径、404 未找到含 suggestion、属性回退、版本回退、网络错误Could not reachlookup 测试单查询、批量查询Physics,Camera,zzz-nonexistent得到found2 / missed1、无结果建议、资产关键词检测与搜索词构造。常见问题与排查建议返回found: false优先确认类名/成员名/slug 拼写。get_doc的 suggestion 会提示先用unity_reflect的search核实类型名get_manual的 suggestion 会提示常见 slug 如execution-order、urp/urp-introduction、UIE-USS-Properties-Referenceget_package_doc的 suggestion 会提示核对包名、版本与页面常见页面index、installation、whats-new。返回success: false且提示无法连接说明网络无法访问 docs.unity3d.com此时lookup中依赖 Unity 连接的资源搜索部分也会降级跳过_search_assets内部捕获ImportError与异常并返回None。lookup部分查询未命中查看summary中的missed与每条results的hits/sources_checked再按 suggestion 改用精确的get_doc/get_manual或项目资产搜索。想查属性而非方法get_doc的成员回退会自动处理点/短横线两种 URL直接写member_nameposition即可。资源类查询想同时看项目资产使用lookup并让查询包含shader、material、texture等关键词但注意该联动需要当前会话具备 Unity 连接。总而言之unity_docs是 Unity MCP 文档验证链路的官方依据环节它不依赖 Unity 编辑器即可使用覆盖面横跨 ScriptReference、Manual 与包文档并通过并行 lookup、自动回退、资产联动等机制把查文档这件事从一次笨拙的单页抓取变成了面向 LLM 的结构化检索能力是写码前校验 API 事实的关键一环。【免费下载链接】unity-mcpUnity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.项目地址: https://gitcode.com/GitHub_Trending/un/unity-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表