十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Unity MCP 程序化纹理生成实战:manage_texture 工具 8 大动作与 TextureImporter 配置全解析

Unity MCP 程序化纹理生成实战:manage_texture 工具 8 大动作与 TextureImporter 配置全解析 Unity MCP 程序化纹理生成实战manage_texture 工具 8 大动作与 TextureImporter 配置全解析【免费下载链接】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导读manage_texture是 Unity MCP 中归属于vfx组的纹理管理工具它允许 AI 助手通过 MCP 协议在 Unity 编辑器中直接生成、修改和删除纹理资源既可以创建纯色填充、棋盘格、条纹、圆点、网格、砖墙等程序化图案也可以生成线性/径向渐变与 Perlin 噪声还能导入本地图片、按像素区域改写纹理并一键配置 Sprite、法线贴图等导入设置。读完本文你将掌握该工具全部 8 个动作的参数语义、颜色归一化规则、底层算法原理以及命令行CLI用法能够在 AI 工作流中稳定地自动化批量生成 UI 占位图、程序化贴图与 Sprite 资源。一、工具概览从 MCP 参数到 Unity 像素manage_texture的官方描述见 服务端工具注册将其定位为Procedural texture generation for Unity. Creates textures with solid fills, patterns (checkerboard, stripes, dots, grid, brick), gradients, and noise.它共提供 8 种动作create、modify、delete、create_sprite、apply_pattern、apply_gradient、apply_noise、set_import_settings。该动作白名单在 Unity 端 ManageTexture.cs 中被硬编码校验未知动作会直接返回错误信息并列出合法动作列表。从架构上看该工具是一条完整的调用链AI 客户端向 Python MCP 服务端发起manage_texture调用服务端 manage_texture.py 先执行参数归一化与合法性校验再通过send_with_unity_instance/async_send_command_with_retry把参数snake_case 已转换为 camelCase转发给指定 Unity 实例Unity 端 ManageTexture.cs 的HandleCommand按action分发到具体实现操作Texture2D并调用AssetDatabase落盘导入底层像素级操作由 TextureOps.cs 提供填充、像素写入、PNG/JPG 编码等。值得注意的是该工具在 Unity 端注册时带有AutoRegister falseManageTexture.cs即不会自动注册为 Unity 侧独立命令而是由 Python 服务端显式调度同时在服务端注册时标注了destructiveHintTruemanage_texture.py提示客户端delete属于破坏性操作。二、参数参考完整参数表与校验规则下表完整列出该工具的全部参数继承自 官方参数文档并结合 manage_texture.py 与 ManageTexture.cs 补充了默认值与取值范围参数类型必填说明actionLiteral[create,modify,delete,create_sprite,apply_pattern,apply_gradient,apply_noise,set_import_settings]是要执行的动作pathstr \| None否*输出纹理路径如Assets/Textures/MyTexture.pngcreate/modify/delete/apply_/set_import_settings 均要求提供widthint \| None否纹理宽像素默认64必须为正整数heightint \| None否纹理高像素默认64必须为正整数fill_colorlist[int\|float] \| dict \| str \| None否填充色[r,g,b]/[r,g,b,a]数组、{r,g,b,a}对象或十六进制字符串同时支持 0-255如[255,0,0]与 0.0-1.0 归一化如[1.0,0,0]两种区间patternLiteral[checkerboard,stripes,stripes_h,stripes_v,stripes_diag,dots,grid,brick] \| None否apply_pattern/create使用的图案类型palettelist[list[int\|float]] \| str \| None否调色板格式[[r,g,b,a],...]同样支持 0-255 与 0.0-1.0 双区间可用于图案与渐变pattern_sizeint \| None否图案单元尺寸像素默认8必须大于 0pixelslist[list[int]] \| str \| None否直接像素数据[r,g,b,a]的 JSON 数组数量必须等于width*height或 base64 字符串image_pathstr \| None否源图片路径PNG/JPG仅create/create_sprite可用gradient_typeLiteral[linear,radial] \| None否渐变类型默认lineargradient_anglefloat \| None否线性渐变角度度默认0noise_scalefloat \| None否噪声缩放/频率默认0.1octavesint \| None否噪声八度数细节层数默认1必须大于 0set_pixelsdict \| None否modify动作的修改区域{x, y, width, height, color 或 pixels}as_spritedict \| bool \| None否配置为 Sprite{pivot: [x,y], pixels_per_unit: 100}或true使用默认值import_settingsdict \| None否TextureImporter设置字典详见下文第五节服务端对参数做了严格归一化见 manage_texture.py尺寸与 octaves 必须为正整数_normalize_dimension、_normalize_positive_int颜色统一转为 0-255 整数区间_normalize_color_int调色板逐项校验_normalize_palette像素数组长度必须与width*height严格一致_normalize_pixelsimage_path不能与fill_color/pattern/pixels混用且仅限create/create_sprite动作manage_texture.py。任何校验失败都会返回{success: false, message: ...}而不触及 Unity。三、动作详解8 大动作的使用方法与底层原理3.1 create 与 create_sprite从零生成纹理create是最核心的动作。其流程见 ManageTexture.cs纯色填充指定fill_color时TextureOps.FillTexture以 RGBA32 格式整图填充图案指定pattern配合palette、pattern_size时逐像素计算图案颜色像素数据指定pixels时逐像素写入默认行为三者都未指定时Unity 端创建全透明纹理但服务端会在create且无任何内容参数时自动补默认纯白[255,255,255,255]manage_texture.py因此经 MCP 调用时空参数 create得到的是白色纹理图片导入指定image_path时读取本地 PNG/JPG支持绝对路径或相对项目根目录的路径解码为Texture2D此时width/height参数被忽略而采用图片实际尺寸。落盘时 TextureOps.EncodeTexture 根据扩展名编码.png用EncodeToPNG.jpg/.jpeg用EncodeToJPG其他或无扩展名回退为 PNG。写入后调用AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate)完成导入并自动创建缺失的父目录EnsureDirectoryExistsManageTexture.cs。create_sprite与create的纹理生成逻辑完全相同差异在于落盘后会把导入类型配置为 Sprite默认 pivot(0.5, 0.5)、pixels per unit 100可通过as_sprite字典自定义pivot与pixels_per_unitManageTexture.cs。返回值包含path、width、height、asSprite及可选的warnings数组ManageTexture.cs。3.2 apply_pattern七种图案的像素级算法apply_pattern动作在服务端直接复用create的图案生成路径ManageTexture.cs。图案颜色由 GetPatternColor 逐像素计算调色板默认黑白[白, 黑]颜色索引超出时自动Mathf.Clamp到调色板范围内图案算法逻辑checkerboard((x/size) (y/size)) % 2棋盘格交替取调色板第 0/1 色stripes/stripes_v竖条纹(x/size) % palette.Count可产生多色条纹stripes_h横条纹(y/size) % palette.Countstripes_diag斜条纹((xy)/size) % palette.Countdots以2*size为周期的圆点(cx²cy²) size²/4判定是否在圆内圆内取第 1 色grid网格线x % size 0或y % size 0时取第 1 色brick砖墙奇数行偏移size/2在行缝或列缝处取第 1 色实际调用时pattern参数配合palette、pattern_size可以直接放在create中一并使用也可单独使用apply_pattern动作二者等价。3.3 apply_gradient线性与径向渐变apply_gradient要求path默认 64×64默认gradient_type为linear、gradient_angle为0ManageTexture.cs线性渐变ApplyLinearGradient将像素坐标归一化到[0,1]与角度方向向量做点积映射到[0,1]插值参数t径向渐变ApplyRadialGradient以纹理中心为圆心按到中心距离与最大距离之比计算t插值t通过 LerpPalette 在调色板上做多段Color.Lerp若调色板少于 2 色默认使用黑→白渐变。3.4 apply_noisePerlin 噪声与多八度细节apply_noise基于Mathf.PerlinNoise实现ApplyPerlinNoisenoise_scale默认0.1控制噪声频率值越大细节越密octaves默认1控制叠加层数每层振幅减半、频率翻倍形成分形细节服务端会校验octaves 0manage_texture.py每次生成使用UnityEngine.Random生成 0-1000 的随机偏移保证多次生成结果不同噪声值归一化后同样经LerpPalette映射到调色板默认黑→白可用于生成地形高度图、云朵遮罩、程序化草地图案等。3.5 modify按区域改写现有纹理modify需要path指向已存在的纹理通过AssetDatabase.AssetPathToGUID校验存在性ManageTexture.cs。两种模式ManageTexture.cs像素区域写入set_pixels指定{x, y, width, height}配合color纯色填充该矩形或pixels逐像素数据数组长度须等于width*height写入写入会做越界裁剪Mathf.Clamp到纹理边界导入设置快速修改仅传import_settings时走快路径直接应用导入设置不触碰像素。注意modify中set_pixels与import_settings可以同时使用先改像素再应用导入设置。3.6 set_import_settings事后调整导入配置set_import_settings用于对已存在的纹理单独修改TextureImporter配置要求至少提供import_settings或as_sprite之一ManageTexture.cs。import_settings与as_sprite二者互斥同时指定会报错ManageTexture.cs官方建议统一使用import_settings并设textureTypeSprite。3.7 delete删除纹理资产delete只接受path通过AssetDatabase.DeleteAsset删除ManageTexture.cs。纹理不存在时返回错误删除失败也会返回明确错误信息。四、颜色与调色板归一化规则fill_color、palette、set_pixels.color、pixels均接受多种颜色书写形式由 manage_texture.py 统一归一化为 0-255 整数[r,g,b,a]输入形式示例归一化结果0-255 数组[255, 0, 0][255, 0, 0, 255]缺 alpha 补 2550.0-1.0 归一化数组[1.0, 0, 0][255, 0, 0, 255]字典对象{r: 1.0, g: 0, b: 0, a: 1}[255, 0, 0, 255]十六进制字符串#FF0000/#FF000080[255, 0, 0, 255]/[255, 0, 0, 128]归一化判定逻辑与 CLI 端 texture.py 的_is_normalized_color一致当数值含小数或全部落在 0/1 边界内时按 0-1 区间处理并乘 255 取整否则按 0-255 原样处理。集成测试 test_manage_texture.py 验证了[0.0, 0.0, 1.0, 1.0]会被正确转换为[0, 0, 255, 255]。五、import_settings 深度解析TextureImporter 全量配置import_settings是功能最丰富的参数服务端将 snake_case 键转换为 camelCase 后透传给 Unity 的TextureImportermanage_texture.pyUnity 端由 ConfigureTextureImporter 逐项应用。完整的键与合法取值如下键snake_caseUnity 属性合法取值texture_typetextureTypedefault、normal_map、editor_gui、sprite、cursor、cookie、lightmap、directional_lightmap、shadow_mask、single_channeltexture_shapetextureShape2d、cubesrgbsRGBTexturetrue/falsealpha_sourcealphaSourcenone、from_input、from_gray_scalealpha_is_transparencyalphaIsTransparencytrue/falsereadableisReadabletrue/falsegenerate_mipmapsmipmapEnabledtrue/falsemipmap_filtermipmapFilterbox、kaiserwrap_mode/wrap_mode_u/wrap_mode_vwrapMode/wrapModeU/wrapModeVrepeat、clamp、mirror、mirror_oncefilter_modefilterModepoint、bilinear、trilinearaniso_levelanisoLevel整数 0-16max_texture_sizemaxTextureSize必须为32,64,128,256,512,1024,2048,4096,8192,16384之一compressiontextureCompressionnone、low_quality、normal_quality、high_qualitycompression_crunchedcrunchedCompressiontrue/falsecompression_qualitycompressionQuality整数 0-100sprite_modespriteImportModesingle、multiple、polygonsprite_pixels_per_unitspritePixelsPerUnit数字sprite_pivotspritePivot[x, y]二维数组sprite_mesh_typespriteMeshTypefull_rect、tightsprite_extrudespriteExtrude整数 0-32服务端会对枚举值、数值范围aniso_level0-16、compression_quality0-100、sprite_extrude0-32、max_texture_size白名单逐一校验非法值直接返回错误manage_texture.py。布尔键还兼容0/1与true/false字符串_normalize_bool_setting。Unity 端 TryParseEnum 会去掉_/-再做忽略大小写的枚举匹配容错性良好。Sprite 相关的spriteMeshType与spriteExtrude通过TextureImporterSettings写入ManageTexture.cs。集成测试 test_manage_texture.py 验证了{texture_type: sprite, sprite_pixels_per_unit: 100, filter_mode: point, wrap_mode: clamp}会被正确转换为 Unity 侧的{textureType: Sprite, spritePixelsPerUnit: 100, filterMode: Point, wrapMode: Clamp}。六、CLI 命令行用法除 MCP 协议外同一套能力还封装为unity-mcp texture命令组texture.py适合本地脚本化调用# 创建纯色纹理默认白色支持十六进制与数组颜色 unity-mcp texture create Assets/Red.png --color [255,0,0] unity-mcp texture create Assets/Check.png --pattern checkerboard # 快速生成 Sprite默认 100 PPU、pivot [0.5,0.5]无内容参数时默认棋盘格图案 unity-mcp texture sprite Assets/Sprites/Player.png unity-mcp texture sprite Assets/Sprites/Coin.png --pattern dots --ppu 64 --pivot [0.5,0.5] # 修改现有纹理区域填色 / 逐像素写入 / 导入设置 unity-mcp texture modify Assets/Tex.png --set-pixels {x:0,y:0,width:10,height:10,color:[255,0,0]} unity-mcp texture modify Assets/UI/icon.png --as-sprite unity-mcp texture modify Assets/UI/bg.png --texture-type sprite --max-size 2048 # 单独调整导入设置 unity-mcp texture set-import-settings Assets/UI/icon.png --texture-type sprite --sprite-mode single --sprite-ppu 100 # 删除纹理默认需确认--force 跳过 unity-mcp texture delete Assets/Textures/Old.png --forceCLI 端的--max-size、--compression、--texture-type、--sprite-mode等选项均使用与 MCP 相同的枚举映射与校验texture.pydelete走confirm_destructive_action二次确认texture.py。七、约束、边界与安全检查维度上限Unity 端对超出推荐上限的尺寸仅产生 warning 而非硬性报错ValidateDimensions单边超过1024像素 → warning总像素超过1024×1024约 1M 像素→ warning宽度或高度非正 → 直接报错噪声工作量width × height × octaves超过4,000,000时产生 warningManageTexture.cs避免 AI 误提交超大噪声任务卡死编辑器像素数组长度pixels数组长度必须与width*height严格一致否则拒绝执行并给出期望数量manage_texture.py破坏性操作提示工具注册时带destructiveHintTruedelete在 CLI 中需确认执行前检查服务端在每次调用前执行preflight(ctx, wait_for_no_compileTrue, refresh_if_dirtyTrue)manage_texture.py等待编译完成并在资源脏时先刷新保证操作时编辑器处于稳定状态实例路由通过get_unity_instance_from_context(ctx)解析目标 Unity 实例支持多实例环境下的精确定向。八、测试验证参数归一化与错误处理的证据集成测试 test_manage_texture.py 通过 mock 传输层验证了工具的参数归一化与错误处理行为test_create_texture_with_color_array0-255 颜色数组原样透传L24-L46test_create_texture_with_normalized_color0.0-1.0 颜色被转换为 0-255L48-L68test_create_sprite_with_patterncreate_spritecheckerboardas_sprite{pixelsPerUnit, pivot}正确组装参数L70-L95test_texture_modify_pixels_arrayset_pixels.pixels中的归一化颜色被转换0.5,0.5,0.5→128,128,128L154-L189test_texture_modify_pixels_invalid_length像素数组长度不匹配时返回pixels array must have 4 entries错误L191-L217test_invalid_dimensions非正尺寸被拒绝L257-L277。这些测试覆盖了本文第三节至第五节描述的颜色归一化、像素校验与尺寸校验逻辑可作为行为契约参考。结语manage_texture是 Unity MCP 中生成式资产管理的代表性工具它把 AI 的自然语言意图翻译成像素级的确定性操作从纯色、图案、渐变、噪声到任意像素写入全覆盖并以import_settings打通了资源导入管线的最后一个环节。配合 ToolDiscoveryService.cs 的工具发现机制与 tools-reference.md 技能文档AI 助手可以在一次会话中完成生成占位纹理 → 改造成 Sprite → 调整压缩设置的完整素材生产链路显著减少美术资源的重复手工劳动。【免费下载链接】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),仅供参考
返回列表