关于 unity-optimization
面向 Unity 项目的资源与场景优化技能,可分析性能问题并调整纹理、模型和音频压缩设置。
主要功能
- 01分析场景面数和材质用量
- 02查找大型资源与重复材质
- 03分析透明对象过度绘制
- 04批量调整纹理、模型和音频压缩
- 05设置静态标记和 LOD Group
适用场景
- 01定位场景中的高面数或材质问题
- 02筛查超出大小阈值的资源
- 03批量修改资源压缩设置
- 04为 GameObject 配置静态标记或 LOD
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-optimization安装后在 Claude Code 中输入/unity-optimization确认已加载。
详细介绍
**在调用此模块中的任何技能之前:**如果你打算根据技能名称或描述猜测参数后调用技能,请停止——先阅读此文件(或通过
GET /skills/recommend?includeSchema=true获取其 schema)。如果你已经从 recommend/schema 中获得参数定义,则可以直接进行 dryRun。
触发条件
- 缩减构建体积
- 批量压缩资源
- 分析场景面数与材质用量
- 缩减包体、批量压缩资源、分析场景面数与材质用量
优化技能
优化项目资源(纹理、模型)。
操作模式
- 审批:只读分析类技能(
optimize_analyze_scene/optimize_find_large_assets/optimize_get_static_flags/optimize_find_duplicate_materials/optimize_analyze_overdraw,标记为SkillMode.SemiAuto)直接执行;写入类技能(optimize_textures/optimize_mesh_compression/optimize_audio_compression/optimize_set_static_flags/optimize_set_lod_group,默认SkillMode.FullAuto)需要用户授权,授权后一步执行并返回结果。 - 自动 / 绕过:直接执行。
- 本模块不包含 Delete / PlayMode / Reload / RiskLevel=high 类技能 —— 写入类技能修改的是 Importer / 组件设置,会重新导入资源,但不会触发 Domain Reload,也不会被
IsForbiddenInSemi拦截。批量操作前务必检查筛选范围(filter/assetType),修改后无法通过 dry-run 回滚。
不要(常见臆测):
optimize_scene/optimization_run不存在 → 请使用特定技能:optimize_analyze_scene、optimize_find_large_assets、optimize_find_duplicate_materials等。optimize_compress/optimize_compress_textures/optimize_compress_meshes/optimize_compress_audio不存在 → 请使用optimize_textures(纹理)、optimize_mesh_compression(网格)、optimize_audio_compression(音频)optimize_set_lod/optimize_setup_lod不存在 → 请使用optimize_set_lod_group- 优化技能是分析与操作工具——应用批量更改前务必检查结果
路由:
- 对于分析器指标 → 使用
profiler模块 - 对于静态批处理标记 → 使用
optimize_set_static_flags(本模块) - 对于性能审查指导 → 加载
performance指导模块
技能
optimize_textures
优化纹理设置(maxSize、压缩)。返回已修改纹理的列表。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| maxTextureSize | int | 否 | 2048 | 最大纹理尺寸 |
| enableCrunch | bool | 否 | true | 启用 Crunch 压缩 |
| compressionQuality | int | 否 | 50 | 压缩质量,范围为 0-100 |
| filter | string | 否 | "" | 资源筛选条件 |
返回: { success, count, message, modified }
optimize_mesh_compression
设置 3D 模型的网格压缩。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| compressionLevel | string | 否 | "Medium" | 压缩级别:Off/Low/Medium/High |
| filter | string | 否 | "" | 资源筛选条件 |
返回: { success, count, compression, modified }
optimize_analyze_scene
分析场景中的性能瓶颈(高面数网格、过多材质)。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| polyThreshold | int | 否 | 10000 | 高面数警告的三角形数量阈值 |
| materialThreshold | int | 否 | 5 | 过多材质警告的材质槽数量阈值 |
返回: { success, totalRenderers, totalTriangles, totalMaterialSlots, issueCount, issues }
optimize_find_large_assets
查找超过大小阈值(单位:KB)的资源。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| thresholdKB | int | 否 | 1024 | 大小阈值,单位为 KB |
| assetType | string | 否 | "" | 资源类型筛选条件(例如 Texture2D、AudioClip) |
| limit | int | 否 | 50 | 最大结果数 |
返回: { success, threshold, count, assets }
optimize_set_static_flags
为 GameObject 设置静态标志。flags 为逗号分隔的标志,取值包括 ContributeGI、OccluderStatic、OccludeeStatic、BatchingStatic、ReflectionProbeStatic,以及两个已弃用成员 NavigationStatic 和 OffMeshLinkGeneration。
Everything表示五个未弃用的标志,而不是字面意义上的全部。StaticEditorFlags未声明Everything或Nothing,因此这两个名称是此 API 新增的别名:Nothing会清除所有位,Everything则是 Unity 自带的 Static 下拉菜单仍提供的成员的按位或结果——数值为87,而非完整的127。NavigationStatic和OffMeshLinkGeneration已弃用且不包含在内,因此如果需要它们,请明确指定名称。每个列出的部分都必须有效:只要有一个未知名称,整个调用就会失败,而不会静默应用已解析的部分;包含枚举声明掩码以外位的原始数字("999")也会被拒绝。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| name | string | 否 | null | GameObject 名称 |
| instanceId | int | 否 | 0 | GameObject 实例 ID |
| path | string | 否 | null | GameObject 层级路径 |
| flags | string | 否 | "Everything" | 逗号分隔的静态标志,或 Everything / Nothing 别名(见上文) |
| includeChildren | bool | 否 | false | 递归应用于所有子对象 |
返回: { success, gameObject, flags, affectedCount }
optimize_get_static_flags
获取 GameObject 的静态标志。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| name | string | 否 | null | GameObject 名称 |
| instanceId | int | 否 | 0 | GameObject 实例 ID |
| path | string | 否 | null | GameObject 层级路径 |
返回: { success, gameObject, flags, isStatic }
optimize_audio_compression
批量设置音频压缩。compressionFormat:PCM/Vorbis/ADPCM。loadType:DecompressOnLoad/CompressedInMemory/Streaming
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| compressionFormat | string | 否 | "Vorbis" | 音频压缩格式:PCM/Vorbis/ADPCM |
| loadType | string | 否 | "CompressedInMemory" | 音频加载类型:DecompressOnLoad/CompressedInMemory/Streaming |
| quality | float | 否 | 0.5 | 压缩质量,范围为 0.0-1.0 |
| filter | string | 否 | "" | 资源筛选条件 |
返回: { success, count, compressionFormat, loadType, modified }
optimize_find_duplicate_materials
查找着色器和属性相同的材质。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| limit | int | 否 | 50 | 返回的重复组最大数量 |
返回: { success, duplicateGroups, groups }
optimize_analyze_overdraw
分析可能导致过度绘制的透明对象。
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| limit | int | 否 | 50 | 结果的最大数量 |
返回: { success, transparentObjectCount, objects }
optimize_set_lod_group
添加或配置 LOD Group。lodDistances:以逗号分隔的屏幕相对高度(例如 '0.6,0.3,0.1')
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| name | string | 否 | null | GameObject 名称 |
| instanceId | int | 否 | 0 | GameObject 实例 ID |
| path | string | 否 | null | GameObject 层级路径 |
| lodDistances | string | 否 | "0.6,0.3,0.1" | 以逗号分隔的屏幕相对过渡高度 |
返回: { success, gameObject, lodLevels, distances }
精确签名
准确的名称、参数、默认值和返回值由 GET /skills/schema 或 unity_skills.get_skill_schema() 定义,而非由此文件定义。