오디오 믹서 설정
Audio Source를 믹서 그룹에 라우팅하는 것은 실행 중인 에디터에서만 수행할 수 있는 씬 편집이므로, 이 스킬은 C#을 실행할 수 있는 라이브 에디터가 필요합니다. 0단계에서는 그 외의 모든 작업보다 먼저 이를 확인합니다.
이 스킬이 자동화하는 것과 사용자에게 맡기는 것. 믹서 검사 및 Audio Source를 그룹으로 라우팅하는 것은 전적으로 공개 Unity API이며, 지루한 부분(수십 개의 소스를 살펴보고 재생하는 내용에 따라 분류)입니다. 믹서나 그룹을 생성하는 공개 API는 없으며, Unity가 안정적으로 유지하겠다고 약속하지 않은 형식에만 존재합니다. 따라서 이 스킬은 사용자 모르게 그룹을 생성하지 않습니다. 기존 항목을 인벤토리하고, 라우팅을 제안하며, 사용자에게 Audio Mixer 창에서 누락된 그룹을 추가하도록 요청한 다음 모든 라우팅을 직접 수행합니다.
이는 우회해야 할 간격이 아니라 의도적인 한계입니다. 리플렉션을 사용하여 그룹을 생성하거나 .mixer 파일을 수동으로 편집하지 마세요. 믹서 구조는 맹목적으로 작성하기에 안전하지 않습니다.
0단계: 에디터에서 C#을 실행할 수 있는지 확인
아래의 모든 C# 단계는 Unity CLI를 통해 라이브 에디터 내에서 실행됩니다. unity-cli 스킬이 이를 수행하는 방법을 제공합니다 — CLI 설치, 연결된 에디터 확인, 프로젝트의 com.unity.pipeline 패키지 추가, 실제로 없는 에디터와 Safe Mode에 갇힌 에디터 구별, 에디터의 명령 카탈로그 검색. 먼저 따르고, 여기서 다시 파생하지 마세요.
스킬이 사용자를 위해 알 수 없는 두 가지:
- 특히
eval이 필요합니다. 단지 연결 가능한 에디터만으로는 충분하지 않습니다. 카탈로그에 나타나는지 확인하세요.eval의 존재 여부는 CLI가 아닌 Pipeline 패키지 버전에 따라 달라지므로, 정상적으로 설치된 경우에도eval이 없을 수 있습니다 — 없다면 말하고 중단하세요. - 수동으로
.mixer파일을 편집하는 것으로 대체하지 마세요. 믹서 라우팅은 맹목적으로 작성하기에 안전하지 않으므로, 연결할 수 없는 에디터는 중단 신호이지 즉흥적으로 대처하라는 신호가 아닙니다.
eval을 사용할 수 있게 되면, 아래 각 C# 단계가 실행됩니다.
eval 명령을 통해 연결된 에디터에서 C#을 실행하세요. unity command --format json에서 매개변수 형태를 알아내고, 가정하지 마세요. 인라인 형식은 unity command eval --code '<snippet>'이며, 일부 Pipeline 버전에서는 파일에서 스니펫을 실행하기 위해 eval_file도 등록합니다. eval_file을 사용하기 전에 카탈로그를 확인하세요. 자주 없습니다. unity command의 기본 제한 시간은 30초입니다.
C#을 eval에 전달하기
eval은 파일이 아닌 명령문 블록을 컴파일합니다. 두 가지 결과가 있으며, 둘 다 경고가 아닌 컴파일 오류를 발생시킵니다:
using지시문 없음. 컴파일러는using UnityEngine;을 리소스 해제 문으로 읽고 거부합니다(CS0210).- 형식은 완전히 한정되어야 함.
AssetDatabase또는Volume만으로는 확인되지 않으며(CS0246/CS0103),Object만으로는object와 모호합니다(CS0104).
아래 스니펫이 가독성을 위해 또는 프로젝트에 저장하기 위한 파일로 작성된 경우(using 포함), eval에 전달하기 전에 형식을 한정하세요.
1단계: 사전 조사
사용자가 Audio Mixer를 명시적으로 요청하지 않은 경우, 설정을 진행할 것인지 확인합니다.
그런 다음 references/api.md의 믹서 인벤토리 스니펫을 사용하여 이미 존재하는 것을 인벤토리하고, 0단계에서 설명한 대로 에디터를 통해 실행합니다. 그러면 프로젝트의 모든 믹서와 각 그룹 이름이 제공됩니다.
부모/자식 트리가 아닌 그룹의 평면 목록을 반환합니다. 라우팅하기에 충분하며, 공개 API가 노출하는 전부입니다. 계층 구조가 대화에 중요하다면 사용자에게 Audio Mixer 창을 보고 설명하도록 요청하고, 비공개 트리 API를 사용하여 알아내지 마세요.
프로젝트에 믹서가 전혀 없는 경우, 말하고 중단하세요. 믹서를 즉흥적으로 만들지 마세요. 믹서 생성에는 공개 API가 없습니다. 사용자에게 믹서를 만들도록 요청하고(Window → Audio → Audio Mixer, 그런 다음 Mixers 옆의 +), 믹서가 존재하면 여기서부터 진행하세요.
2단계: 씬 참조 찾기
모든 Audio Source 컴포넌트를 찾고, 할당된 Generator 에셋 이름을 확인한 후, 사운드 이름에 적합한 클래스 또는 카테고리를 일반화하세요. 이상적으로는 이미 존재하는 것입니다.
Audio Clip 에셋 이름 예시:
- "FootStep4_Sound" -> Foley
- "Dialogue_Female_Scene4" -> Vox/Voice/Dialogue
- "GunShot" -> SFX
- "Menu_Theme_Variation" -> Music
할당된 에셋이 설명적이지 않거나 없는 경우, GameObject 이름이나 잠재적인 인접 MonoBehaviour 이름을 살펴보세요.
분류가 어렵거나 Audio Source 사용 방식을 분류하는 데 자신감이 낮은 경우, Uncategorized 그룹을 만들도록 요청하세요.
3단계: 그룹 목록에 동의하고 누락된 그룹 생성 요청
2단계의 분류를 제안된 라우팅(각 Audio Source와 보낼 그룹)으로 제시하고 사용자와 수정하세요.
계속 진행하기 전에 사용자의 응답을 기다리세요.
카테고리를 진정으로 포함하는 경우 기존 그룹을 선호하세요. 이름을 다르게 지었을지라도 말입니다. 하지만 믹싱 엔지니어가 분리해야 할 카테고리를 병합하지 마세요. Foley는 SFX의 하위 집합이지 다른 단어가 아니므로, Foley 그룹이 존재한다고 해서 총성이 거기에 속하는 것은 아닙니다. 기존 그룹이 카테고리를 부분적으로만 포함하는 경우, 어떤 것이 맞고 어떤 것이 새 그룹이 필요한지 말하고 사용자가 결정하도록 하세요.
일치하는 그룹이 없는 카테고리의 경우, 그룹을 만들 수 없습니다. 공개 API가 없기 때문입니다. references/api.md 끝에 표시된 대로 믹서 이름과 정확한 그룹 이름을 지정하여 정확히 전달하세요. 그런 다음 인벤토리 스니펫을 다시 실행하여 그룹이 존재하는지 확인하고 철자를 확인하세요. 사용자가 수행했다고 가정하지 말고, 사용자가 요청한 대로 철자를 썼다고 가정하지 마세요.
4단계: Audio Source 라우팅
그룹 목록을 확정하고 존재를 확인한 후, references/api.md의 라우팅 스니펫을 사용하여 각 Audio Source의 출력 그룹을 할당하세요. 전체 과정은 공개 API이며, 단일 취소 단계로 래핑되어 사용자가 모든 작업을 한 번에 되돌릴 수 있습니다.
분류한 식별자를 매핑 키로 사용하세요. 2단계는 먼저 클립 에셋 이름을 읽고 GameObject 이름으로 대체하므로, 매핑은 둘 중 하나를 허용합니다. 두 식별자는 다르며, 잘못된 식별자를 키로 사용하면 소스가 누락됩니다.
다음 세 가지를 가정하지 말고 보고하세요:
- 스니펫이 반환하는
NO SUCH GROUP항목. 이는 예상한 그룹이 믹서에 없음을 의미합니다(일반적으로 철자 차이). 사용자와 해결하고, 소스를 조용히 건너뛰지 마세요. NOT IN THE MAPPING항목. 분류에서 누락된 Audio Source입니다. 소스가 조용히 라우팅되지 않은 상태에서 성공적인 라우팅을 보고하는 것은 최악의 결과입니다. 성공으로 읽히기 때문입니다.- 수정된 것은 씬이지 믹서 에셋이 아닙니다. 라우팅은 Audio Source에 저장되므로 씬이 저장된 후에만 유지됩니다. 사용자에게 알리고, 사용자 동의가 있을 때만 저장하세요.
볼륨, 이펙트, 부모 재지정은 범위 밖입니다. 이는 비공개 API에 있습니다. 사용자가 요청하면 라우팅이 완료되었음을 말하고 Audio Mixer 창을 가리켜 믹스 자체를 처리하도록 하세요.
참조
references/api.md를 참조하세요.