는 보통 어떻게 하시나요?
일단은 옵션에서 플레이어가 배경음/효과음을 조절할 수 있어야하니 통합적인 뭔가를 공유하고 있어야할 것 같은데..
그리고 저는 약간 보드게임 스러운 미니미니한 전략게임 스타일을 만들고 있는데
여럿 UI들이 상호작용하거나 클릭하거나 하는 자잘한 1회성 효과음들이 잦은데
이런 경우에는 어떻게 구조를 짜서 관리하시는지 궁금합니다..
개발 뉴비여서 그냥 직관대로 설명을 하자면
예를 들면 뭔가 내부 구조가 깔끔하게 짜여져있는 큰 스피커 하나가 게임오브젝트로 있어서
UI들이 틀어줘 틀어줘 할 때마다 사운드가 한번씩 뿅뿅 재생되고 마는 형태라면
스크립터블 오브젝트라던가 사운드 소스만 숑숑 넣어놓고 참 관리가 편할텐데 하는 생각이 드는데
구현해본적도 없는 뉴비라 잘 모르겠습니다..
저는 유니티를 쓰긴 하지만
다른 툴도 전체적인 구조면에서 참고할 수 있을 것 같아서 답변 남겨주시면 새겨듣겠습니다.
ㅇㅇ 정답을 알고있어서 해줄 말이 없음 그대로 구현하면 됨
구현하는 방식에 따라 소리가 재생될 때 다른 소리를 재생하면 먼저 재생되던 소리가 꺼진다던가 or 소리가 무한으로 겹쳐져서 엄청 크게 들린다던가 등등 별의 별 문제가 계속 생기기 때문에, 하나하나 처리하다보면 품이 많이 들어서 결국 에셋 쓰는게 정배이긴 해
원글에 말씀해주신 내용 몇 가지를 말씀드리겠습니다. 첫 번째, "스피커 하나로 이벤트를 수신 받아 원하는 음향 소스들을 송출 하는 형태"입니다. 스피커 하나로 'PlayOneShot' 메소드로 음향 소스를 송출할수는 있습니다. 다만, 가비지 메모리가 생겨 많은 요청을 할 경우 게임이 끊기는 현상이 발생할 수 있습니다. 그래서, 많은 분들이 오브젝트 풀링 기법을 활용하여 스피커들을 풀링 시켜놓고 하나씩 꺼내어 사용하는 쪽으로 합니다. 두 번째, "스크립터블 오브젝트에 오디오 클립(?)을 보관하는 형태"입니다. 이는 이벤트 송신 방식을 활용한다면 충분히 가능합니다.
1. Resources파일이나 어드레서블로 로드 2. SoundManager 만들어 놔(싱글턴 같은걸로 하던지 스크립터블로 만들어서 Resources로 로드하던지 알아서 전역 접근 가능하도록 만들어) 3. SoundManager에서 AudioSource 필요한 만큼 만들어(BGM, SFX, 더빙 대사 등등) 4. Play 메서드 만들어서 어느 사운드랑 AudioSource쓸건지 파라미터 받아 5. 끝 나는 이런 방법 많이씀
게임 만들다보니 리소스 로드하고 관리하는 부분에 대해서 깊게 고민하게되더라 어떤 사람들은 SO에 시리얼라이즈 가능하게 만든 딕셔너리 넣어두고 ID로 호출하는 사람도 있고 나 처럼 파일명으로 로드하는 사람도 있고 아니면 깡으로 리스트에 넣어두고 로드하는 사람도 있고 근데 파일 용량이 크다면 어드레서블로 이번 씬에서 쓸 사운드만 로드해서 리스트에 넣던지 딕셔너리에 넣던지