mcpField
U
unity-shadergraph

unity-shadergraph

github.com/besty0728开发1.9k77 次安装今天更新
代码仓库

关于 unity-shadergraph

unity-shadergraph 是用于检查和编辑 Unity Shader Graph 与 Sub Graph 资源的技能模块。它依据实时图结构和固定版本的节点白名单限制编辑范围。

主要功能

  1. 01列出模板和图资源
  2. 02检查图结构与属性
  3. 03创建图和子图
  4. 04添加、移动和连接受支持的节点
  5. 05编辑属性与关键字
  6. 06重新导入图资源

适用场景

  1. 01编辑节点前检查图结构
  2. 02用受支持的节点构建图
  3. 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 资源。

工作流

  1. 创建或定位目标图。
  2. 读取 shadergraph_get_structure。
  3. 如有需要,先创建黑板属性或关键字。
  4. 调用 shadergraph_list_supported_nodes,确认节点类型、设置白名单和插槽布局。
  5. 添加或移动节点,然后使用实时的 nodeId/slotId 值进行连接或断开。
  6. 如果下一步操作取决于拓扑结构,则在每次重要编辑后重新读取 shadergraph_get_structure。

精确签名

确切的名称、参数、默认值和返回值由 GET /skills/schema 或 unity_skills.get_skill_schema() 定义,而非由此文件定义。

评论

支持 Markdown