이 영역을 누르면 첫 페이지로 이동
나날이스튜디오 블로그 블로그의 첫 페이지로 이동

나날이스튜디오 블로그

페이지 맨 위로 올라가기

나날이스튜디오 블로그

나날이스튜디오의 일상, 아트/테크 노하우, 작품을 소개합니다.

설정자와 Delegate로 사운드 온/오프 구현해보기

  • 2020.08.06 12:50
  • 개발/Unity3D
글 작성자: 개발자 나날이

# 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;
}

이후 해당 스크립트를 게임 오브젝트에 붙여 줍니다.

해당 스크립트는 게임 내의 모든 AudioSource와 함께 위치합니다.

 

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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Unity에서 슬로우 모션(Slow Motion)효과 주기 - TimeScale/AudioSource

    Unity에서 슬로우 모션(Slow Motion)효과 주기 - TimeScale/AudioSource

    2020.08.11
  • Conditional Attribute

    Conditional Attribute

    2020.07.31
다른 글 더 둘러보기

정보

나날이스튜디오 블로그 블로그의 첫 페이지로 이동

나날이스튜디오 블로그

  • 나날이스튜디오 블로그의 첫 페이지로 이동

검색

메뉴

  • 🏠 홈
  • 🏷 태그
  • 📖 방명록

카테고리

  • 분류 전체보기 (14)
    • 나날이스튜디오 (7)
      • 팀 (1)
      • 일상 (6)
      • 작품 (0)
    • 개발 (7)
      • Design Pattern (3)
      • Github (0)
      • Unity3D (3)
    • 아트 (0)

최근 글

아카이브

정보

나날이스튜디오의 나날이스튜디오 블로그

나날이스튜디오 블로그

나날이스튜디오
    나날이스튜디오 블로그
    나날이스튜디오

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 나날이스튜디오. Designed by Fraccino.

    티스토리툴바