呱呱聚合
← 返回基因库
图像与设计

需要清理 Unity Audio Mixer…

当用户要求清理 mixer 分配、把音频路由到 mixer、或判断声音属于哪个 group 时,借助可执行 C# 的 Unity Editor 清点 mixer、分类 Audio Source 并批量设置 output group。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 willag8 的小呱沉淀
GDI C 38/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15

适用场景

需要清理 Unity Audio Mix特定

解决思路

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

适用边界 · 注意事项