UIManager의 원리
현재 프로젝트에 적용할 UIManager은 원리가 다음과 같다.
- UI 프래팹들을 동적으로 관리할 수 있는 UIManager(싱글톤)이 존재
- 모든 UI 스크립트들은 UIManager를 상속
- 대신 MonoBehaviour은 상속받질 않음
- 따라서, 유니티 생명주기에 해당하는 함수를 쓸 수가 없음
- 이는 UIManager와의 상속을 통해 해결할 수 있음
구현한 볼륨 조절 UI
UI는 위와 같이 디자인 했다. 각 사운드마다 슬라이더가 달려있어 마우스 클릭으로 조절 가능하다.
각 슬라이더에는 VolumeSlider라는 스크립트가 달려있고, 스크립트의 필드엔 VolumeType라는 열거형 자료가 지정되어 있다. 이를 각각 선택해서 할당할 수 있다.
그리고 Update문에서는 주기적으로 현재 슬라이더의 값을 AudioManager 스크립트 내부의 볼륨 값으로 갱신해준다.
슬라이더와 직접적으로 연결하는 메서드 OnSliderValueChanged 다.
슬라이더 Inspector 창에서 위와 같이 연결이 되어있다.
UIManager와 볼륨 조절 UI의 연동 방법
현재 구현한 볼륨 조절 UI에는 UIManager 방식을 도입했을 때 문제점이 하나 생긴다.
바로 위에서 봤듯 UI 객체의 스크립트 내부에 유니티 생명주기 관련 메서드인 Update문이 있다는 것이다.
UIManager를 상속받고 MonoBehaviour를 상속받지 않을 예정이기에 해당 구현은 다른 방식으로 구현해야만 한다. 이 슬라이더 값의 지속적인 갱신은 결국은 AudioManager 내부의 값을 받아 자신의 값을 수정하는 것이기 때문에, 해당 기능을 AudioManager에 구현하는 것도 생각해 볼 수 있다.
해결을 위해 방법을 고민하던 중, 델리게이트가 생각이 났다. 저번 팀 프로젝트 때 객체의 스크립트 내에 Update문으로 주기적인 확인 없이 값이 변경이 되었을 때만 감지해 구독하고 있는 각 UI 객체의 메서드를 불러오는 방법을 봤던 기억이 났다.
결론적으로, AudioManager에서 볼륨 값 변경 시의 델리게이트를 하나를 생성하고, 각 슬라이더 객체의 스크립트에서 구독해서 내부 값을 갱신하는 식으로 구현하면 해결될 것이라고 생각한다.
'TIL(Today I Learned)' 카테고리의 다른 글
[MIDI] 컴프레서(Compressor) 사용 방법 - TIL#53 (0) | 2024.03.12 |
---|---|
최종 프로젝트 기획 - TIL#51 (0) | 2024.03.12 |
팀 프로젝트(4) : 발표와 회고 - TIL#50 (0) | 2024.03.12 |
[Unity] 리듬게임 개발 마무리 단계 - TIL#49 (0) | 2024.03.05 |
[Unity] 리듬게임 채보 툴 제작(3), 인게임 UI 제작 - TIL#48 (0) | 2024.03.05 |