关于 unity-shadergraph
unity-shadergraph 是用于检查和编辑 Unity Shader Graph 与 Sub Graph 资源的技能模块。它依据实时图结构和固定版本的节点白名单限制编辑范围。
主要功能
- 01列出模板和图资源
- 02检查图结构与属性
- 03创建图和子图
- 04添加、移动和连接受支持的节点
- 05编辑属性与关键字
- 06重新导入图资源
适用场景
- 01编辑节点前检查图结构
- 02用受支持的节点构建图
- 03更新图属性或关键字
MCP 相关
README 介绍了 Unity 技能,但未明确说明该模块与 MCP 的关系。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-shadergraph安装后在 Claude Code 中输入/unity-shadergraph确认已加载。
详细介绍
**调用此模块中的任何技能前:**如果你打算根据技能名称或描述猜测参数后调用技能,请停下——先阅读此文件(或通过
GET /skills/recommend?includeSchema=true获取其架构)。如果你已从 recommend/schema 获取参数定义,则可以直接进行 dryRun。
触发条件
- 创建 Shader Graph
- 检查图结构
- 对黑板/节点进行受控编辑
- 创建 Shader Graph、检查其结构、对黑板/节点做受控编辑
ShaderGraph 技能
适用于 Unity 2022.3+ 的 Shader Graph 资源工作流,支持基于源文件的模板处理、MultiJson 检查,以及受限的内部编辑器反射写入。
运行模式
- 查询类技能(
shadergraph_list_templates、shadergraph_list_assets、shadergraph_get_info、shadergraph_get_structure、shadergraph_list_supported_nodes、shadergraph_list_properties、shadergraph_list_keywords)属于SkillMode.SemiAuto——在所有三种模式下均可运行,无需授权。 - 其他所有修改类技能(创建图/子图、添加/移动/连接/断开节点、设置节点默认值/设置、添加/更新属性/关键字、重新导入)均属于
SkillMode.FullAuto——在 Approval 模式下需要用户授权(授权后会触发一次服务端执行并返回结果);在 Auto / Bypass 模式下会直接执行。 shadergraph_remove_node、shadergraph_remove_property、shadergraph_remove_keyword属于SkillOperation.Delete,在 Approval / Auto 模式下会被 自动禁止(NeverInSemi)。只有 Bypass 或用户管理的 Allowlist 可以运行这些技能。
反射脆弱性
此模块通过反射访问 UnityEditor.ShaderGraph 和 UnityEditor.ShaderGraph.Internal(见 ShaderGraphReflectionHelper.cs 和 ShaderGraphNodeRegistry.cs)。受支持的节点白名单、插槽布局和设置键均针对 com.unity.shadergraph 14.0.x(Unity 2022.3)固定版本,并有限支持 Unity 6。以下内容视为硬性约定:
- 切勿凭记忆假设某个内部类型、字段或插槽 ID 存在——务必先通过
shadergraph_list_supported_nodes和shadergraph_get_structure交叉核对。 - 如果 Shader Graph 包更新导致内部类型或
MultiJson架构发生变化,在注册表更新前,修改类技能可能会失败或静默无操作。 - 如果技能返回的错误提及反射/类型查找失败,请勿尝试不同的参数格式——报告版本不匹配并停止。
防护规则
路由:
- HLSL 文本着色器:使用
shader_* - Shader Graph / Sub Graph 资源:使用此模块
- 在提出图架构方案前,需要基于源文件的设计指导:加载 shadergraph-design
运行时优先规则:
- 进行任何节点级编辑前,务必调用
shadergraph_get_structure;返回的nodeId和slotId是唯一有效标识符 - 切勿凭记忆编造插槽名称、节点 ID 或模板可用性
shadergraph_set_node_defaults仅适用于未连接的输入插槽;如果插槽已连接,请先断开连接shadergraph_set_node_settings仅写入shadergraph_list_supported_nodes所公开的白名单内容PropertyNode仅绑定已有的黑板属性;请先使用shadergraph_add_property创建属性- 子图编辑仅限普通节点;此模块不会编辑
SubGraphOutputNode结构
已验证行为:
- Unity 2022.3 +
[email protected]不包含GraphTemplates/;shadergraph_create_graph会回退到创建空白图 - Unity 6 的 ShaderGraph 包可能提供实际模板目录;模板列表和基于模板副本的创建仍可用
- 受支持的节点子集会在运行时进行筛选。实时验证中的共有部分包含 28 个节点,而
AppendVectorNode目前仅支持 Unity 6
技能
shadergraph_list_templates
列出已安装包提供的 Shader Graph 模板。
shadergraph_create_graph
根据程序包模板或空白后备方案创建 Shader Graph 资源。
shadergraph_create_subgraph
创建带有已配置输出插槽的空白 Shader 子图资源。
shadergraph_list_assets
列出项目中的 Shader Graph 和子图资源。
shadergraph_get_info
获取 Shader Graph 或子图资源的概要信息。
shadergraph_get_structure
检查实时图结构。返回真实的 nodeId、position、slots、edges、properties 和 keywords。
shadergraph_list_supported_nodes
列出受限的节点白名单、支持的版本、插槽和可编辑设置。
shadergraph_add_node
通过 nodeType 添加受支持的节点,可选择设置初始设置和位置。
shadergraph_remove_node
通过序列化的 nodeId 移除节点;相关边也会一并移除。
shadergraph_move_node
通过序列化的 nodeId 移动节点。
shadergraph_connect_nodes
使用 nodeId + slotId 将指定输出插槽连接到指定输入插槽。
shadergraph_disconnect_nodes
使用相同的四元组断开一条精确的边。
shadergraph_set_node_defaults
设置未连接输入插槽的默认值。
shadergraph_set_node_settings
仅写入白名单中的节点设置。
shadergraph_list_properties
列出图的黑板属性。
shadergraph_add_property
添加受限的黑板属性。
shadergraph_update_property
更新受限的黑板属性。
shadergraph_remove_property
移除图属性。
shadergraph_list_keywords
列出图的黑板关键字。
shadergraph_add_keyword
添加图关键字。
shadergraph_update_keyword
更新图关键字。
shadergraph_remove_keyword
移除图关键字。
shadergraph_reimport
外部编辑后强制重新导入 Shader Graph 资源。
工作流
- 创建或定位目标图。
- 读取
shadergraph_get_structure。 - 如有需要,先创建黑板属性或关键字。
- 调用
shadergraph_list_supported_nodes,确认节点类型、设置白名单和插槽布局。 - 添加或移动节点,然后使用实时的
nodeId/slotId值进行连接或断开。 - 如果下一步操作取决于拓扑结构,则在每次重要编辑后重新读取
shadergraph_get_structure。
精确签名
确切的名称、参数、默认值和返回值由 GET /skills/schema 或 unity_skills.get_skill_schema() 定义,而非由此文件定义。