설정자와 Delegate로 사운드 온/오프 구현해보기
# Introduce
BGM이나 SFX의 온/오프를 설정자와 Delegate를 이용하여 간단히 제어해 봅시다.
# For example
1. 매니저
우선 매니저 역할을 하는 스크립트에 해당과 같은 Delegate를 추가합니다.
public Action _OnSoundMuted; public Action _OnSoundUnmuted;
사운드 on/off 여부를 가르키는 변수를 만들어 줍니다.
private bool m_bSoundOn;
사운드 변수에 접근하는 접근자, 설정자를 만들어 줍니다.
설정자에 접근할때(사운드가 켜고 꺼질때) 해당 Delegate가 Invoke 됩니다.
public bool _SoundOn { get { return m_bSoundOn; } set { if (value) { _OnSoundUnmuted?.Invoke(); } else { _OnSoundMuted?.Invoke(); } m_bSoundOn = value; } }
2. AudioSourceInit
그리고 AudioSource와 항상 함께 붙일 스크립트 하나를 만듭니다.
private void OnEnable() { StartCoroutine(Initialize()); GameManager.getInstance._OnSoundMuted += OnSoundMuted; GameManager.getInstance._OnSoundUnmuted += OnSoundUnmuted; } private void OnDisable() { GameManager.getInstance._OnSoundMuted -= OnSoundMuted; GameManager.getInstance._OnSoundUnmuted -= OnSoundUnmuted; } private IEnumerator Initialize() { yield return null; if (!GameManager.getInstance._SoundOn) OnSoundMuted(); else OnSoundUnmuted(); } void OnSoundMuted() { GetComponent<AudioSource>().mute = true; } void OnSoundUnmuted() { GetComponent<AudioSource>().mute = false; }
이후 해당 스크립트를 게임 오브젝트에 붙여 줍니다.

3. 사운드 토글 UI
마지막으로 사운드 토글 UI에 다음과 같은 코드를 적용합니다.
GameManager.getInstance._SoundOn = !GameManager.getInstance._SoundOn;
# Comment
AudioSourceInit의 함수 OnSoundMuted(), OnSoundUnmuted() 를
매니저의 Delegate인 _OnSoundMuted, _OnSoundUnmuted 에 등록하여
사운드 토글 UI에서 토글을 할때 매니저의 설정자를 통해 Delegate를 Invoke합니다.
# Epilogue
설정자와 Delegate로 간편하게 게임 내의 모든 AudioSource를 mute/unmute 해보았습니다.
위의 예시는 사운드의 토글만을 구현해 보았지만, 더 다양한 환경에 응용해볼 수 있습니다.
게시물을 토대로 자신만의 멋진 패턴을 만들어 보세요.
감사합니다.
# Reference
docs.microsoft.com/ko-kr/dotnet/api/system.action?view=netcore-3.1
Action Delegate (System)
매개 변수가 없으며 값을 반환하지 않는 메서드를 캡슐화합니다.Encapsulates a method that has no parameters and does not return a value.
docs.microsoft.com
docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/using-properties
속성 사용 - C# 프로그래밍 가이드
다음 예제에서는 C#의 속성을 사용하는 방법을 보여줍니다. get 및 set 접근자가 읽기 및 쓰기 액세스를 구현하고 속성 사용법을 알아보는 방법을 확인합니다.
docs.microsoft.com
'개발 > Unity3D' 카테고리의 다른 글
Unity에서 슬로우 모션(Slow Motion)효과 주기 - TimeScale/AudioSource (0) | 2020.08.11 |
---|---|
Conditional Attribute (0) | 2020.07.31 |
댓글을 사용할 수 없습니다.