이 포스트는 거창한 버그 리포트나 픽스를 다루지 않습니다.
그냥 이런 희한한 버그도 있구나 하고 보시길 바랍니다.
유니티에서 실시간으로 에셋을 로딩하고 관리하는 방법은 크게 세 가지가 있는데, Resources와 AssetBundle, 그리고 Addressable이 있습니다.
이 중 Addressable이 가장 최신의 방법이자, 가장 권장되는 방법이고 점차 많은 프로젝트에서 Addressable이 적용되고 있습니다.
각 에셋 관리의 장단점과 왜 Addressable이 점점 더 각광받는지 자세한 이유는 다른 포스트를 참고해주시길 바라고, 어떤 상황에 이 버그가 발생하는지, 왜 이 버그가 문제인지 말씀드리겠습니다.
루트-슈터 장르의 게임을 개발하던 도중, 적 및 플레이어의 오디오 음량 크기를 미리 에디터에서 AudioMixer로 지정을 해두었는데, 빌드만 하면 음량 크기가 제대로 적용이 안되는 문제가 있었습니다.
아무리 찾아봐도 원인을 발견 할 수 없었는데, 오디오가 적용되지 않는 것들의 공통점을 발견 할 수 있었습니다. 바로, 동적으로 로딩되는 오브젝트들만 적용되지 않는다는 점이었습니다.
이걸 토대로 검색을 해보니 이러한 문제를 겪은 사용자들을 몇 발견 할 수 있었고, 유니티 자체 버그라는 것을 확인 할 수 있었습니다.
이 버그는 Addressable로 Prefab을 로드 하였을 때, 그 Prefab의 AudioSource 컴포넌트에 있는 Output AudioMixer가 Null이 되는 버그입니다.
문제는 이 버그가 에디터에서는 나타나지 않으며, 빌드 하였을 때에만 나타난다는 점입니다.
더 큰 문제는 이 문제가 유니티 2022.3.2f1 LTS 버전에 존재한다는 점입니다.
후속 2022LTS 버전에서는 정확히 어떻게 되었는지는 확인하지 못했지만, 유니티 패치노트를 보았을 때 최소 2023.3.0 Beta 빌드에서 이 문제가 해결되었다는 패치 내역을 확인할 수 있었고, 실제로도 최신 23버전에서 테스트 한 결과 정상적으로 동작하였습니다.
요약하자면,
2022.3.2f1 LTS 버전 이하의 Unity에서 Standalone으로 빌드할 때에
Addressable로 Instantiate한 Prefab의 AudioSource의 Output AudioMixer가 제대로 지정이 되지 않는 버그입니다.
이 버그는 일반 개인 수준에서는 해결이 불가능한 버그입니다.
그래서 싱글턴 객체를 하나 놓고, 그 객체에 AudioMixer값을 넣어둔 뒤에 Addressable로 Instantiate되는 Prefab들의 스크립트에서 Awake든 Start든 Output AudioMixer값을 해당 값을 참조해서 지정하게 하는 것 밖에 없습니다.
사실 오디오 시스템을 Prefab으로부터 완전히 독립시킨다면 이런 문제는 발생하지 않겠지만, 이번에 진행한 프로젝트에서 오디오 관련 작업을 담당하신 분이 오디오 관련 작업을 Prefab의 AudioSource에 지정하도록 하는 방식으로 작업을 해서 발생하였지만 여차저차 해결하였습니다.
유니티 엔진 자체 버그를 겪은 것은 처음이라 나름 좀 새로운 경험이었습니다.