图像与设计
需要清理 Unity Audio Mixer…
当用户要求清理 mixer 分配、把音频路由到 mixer、或判断声音属于哪个 group 时,借助可执行 C# 的 Unity Editor 清点 mixer、分类 Audio Source 并批量设置 output group。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
需要清理 Unity Audio Mix特定
解决思路
- 把工作范围分开:清点 mixer、按声音用途分类 Audio Source、把 Audio Source 路由进 group 由本技能自动化;创建 mixer 或 group 不自动化,因为无公开 API,只清点现状、提出路由建议并要求用户补缺失 group。
- 先确认能在一个运行中的 Unity Editor 里执行 C#;本技能所有 C# 步骤都通过 Unity CLI 在 live Editor 内运行。
- 让 `unity-cli` skill 负责进入可执行状态:安装 CLI、确认已连接 Editor、加入项目的 `com.unity.pipeline` 包、区分真正没有 Editor 与卡在 Safe Mode 的 Editor、发现 Editor 命令目录;不要在这里重新推导这些。
- 确认命令目录中存在 `eval`,不仅仅是有可达 Editor;`eval` 是否存在取决于 Pipeline 包版本,不是 CLI,所以健康安装也可能缺少它;若缺失,说明并停止。
- 不要用反射创建 group;不要手工编辑 `.mixer` 文件;mixer 结构不能安全盲写。
- 通过已连接 Editor 的 `eval` 命令运行每个 C# 步骤。
- 用 `unity command --format json` 发现 `eval` 的参数形状,不要凭空假设;内联形式是 `unity command eval --code '<snippet>'`。
- 某些 Pipeline 版本还会注册 `eval_file` 用于从文件运行片段;使用前检查命令目录,因为它经常不存在。
- 注意 `unity command` 默认有 30 秒超时。
- 传给 `eval` 的 C# 是语句块,不是文件;这会导致编译错误而不是警告。
- 不要在传给 `eval` 的片段里写 `using` 指令;编译器会把 `using UnityEngine;` 当成资源释放语句并报 `CS0210`。
- 类型必须完全限定;裸 `AssetDatabase` 或 `Volume` 无法解析并报 `CS0246` / `CS0103`,裸 `Object` 会与 `object` 歧义并报 `CS0104`。
- 如果片段原本写成文件,带 usings、为了可读性,或要保存进项目,在传给 `eval` 前先限定类型。
- 如果用户没有明确要求 Audio Mixers,先确认他们是否想继续设置。
- 用 `references/api.md` 中的 mixer-inventory 片段清点已有内容,并按 Step 0 所述通过 Editor 运行;它会给出项目中的每个 mixer 及每个 mixer 的 group 名。
- 它返回的是扁平 group 列表,不是父子树;这足够用于路由,也是公开 API 能暴露的全部。
- 如果对话需要层级关系,请用户查看 Audio Mixer 窗口并描述;不要为获知层级而使用非公开 tree API。
- 如果项目完全没有 mixer,说明并停止,不要即兴创建;创建 mixer 没有公开 API。请用户创建(Window → Audio → Audio Mixer,然后 Mixers 旁的 +),存在后再从这里继续。
- 查找所有 Audio Source 组件,查看它们被分配的 Generator 资产名,并概括出适合该声音名的一个类别;最好使用已存在的类别。
- Audio Clip 资产名分类示例:`FootStep4_Sound` -> Foley;`Dialogue_Female_Scene4` -> Vox/Voice/Dialogue;`GunShot` -> SFX;`Menu_Theme_Variation` -> Music。
- 如果被分配的资产名不具描述性或不存在,尝试查看 GameObject 名或相邻 MonoBehaviour 名。
- 如果难以分类或置信度低,询问是否创建 Uncategorized group。
- 把 Step 2 的分类作为建议路由呈现:每个 Audio Source 及你打算发送到的 group,并与用户修订。
- 在继续前等待用户回应。
- 当已有 group 真正覆盖该类别时优先使用它,即使你会用不同名字;但不要把混音工程师会保持分离的类别合并,Foley 是 SFX 的子集,不是同义词,所以枪声不应仅因为存在 `Foley` group 就放进 `Foley`。
- 当已有 group 只部分覆盖你的类别时,说明哪些适合、哪些需要新 group,让用户决定。
- 对于没有匹配 group 的类别,你无法创建 group;没有公开 API。精确交接,指出 mixer 名和确切 group 名,如 `references/api.md` 末尾所示。
- 然后重新运行 inventory 片段,确认 group 存在并检查拼写,再路由;不要假设用户做了,也不要假设他们按你要求拼写。
- group 列表确定并确认存在后,用 `references/api.md` 中的 routing 片段分配每个 Audio Source 的 output group;全程公开 API,并把整轮包裹在单个 undo 步骤中,便于用户一次撤销。
- 让映射以你分类时使用的标识符为 key;Step 2 先读 clip asset 名,仅当回退时才用 GameObject 名,所以映射接受两者——它们是不同标识符,key 错会丢 source。
- 报告 routing 片段返回的任何 `NO SUCH GROUP` 条目;这意味着期望的 group 不在 mixer 中,通常是拼写差异;与用户解决,不要静默跳过该 source。
- 报告任何 `NOT IN THE MAPPING` 条目;这些是你的分类遗漏的 Audio Source;在 source 被悄悄留为未路由时报告成功是最坏结果,因为看起来像成功。
- 说明修改的是 scene,不是 mixer asset;路由存在于 Audio Source 上,所以只有保存 scene 后才持久化;告知用户,并且只在用户同意后保存。
- 音量、效果和重新父级不在范围内;这些依赖非公开 API。如果用户要求它们,说明路由已完成,并指向 Audio Mixer 窗口让他们处理混音本身。
- 参考 `references/api.md`。
适用边界 · 注意事项
- 没有可执行 C# 的 live Editor,或缺少 `eval` 命令时:停止,不要改用编辑 `.mixer` 文件或反射创建 group。
- 项目完全没有 mixer,或用户要求创建 mixer/group 时:不适用;没有公开 API,需用户在 Audio Mixer 窗口创建。
- 用户要求设置音量、效果、重父级等混音细节时:不适用;这些属于非公开 API,应指向 Audio Mixer 窗口。