Unity/Unity 물리기반 Merge게임 프로젝트(수박라이크)

[Unity 게임 프로젝트] 물리기반 머지게임(5) - 오디오 시스템 추가

ForMan_ 2024. 4. 29. 14:32

1. 사운드 세팅

1)

사운드 세팅 UI추가,

배경음과 효과음 이미지를 추가,


설정, 배경음, 효과음, 나가기 이미지는 Flacticon사이트에서 받아와

Sprite로 바꿔서 사용했습니다.

 

2) 

골드메탈님의 사이트에서 가져온 배경음, 효과음 추가.

AudioManager라는 새 오브젝트를 하이라키에 생성해주고,

배경음 오브젝트, 효과음 오브젝트를 각각 생성해준 후 드래그 앤 드랍으로 적용시켰습니다.


2. 배경음, 효과음 온/오프 조작


여기서 체크이미지는

Toggle로 만들었고

사운드 세팅 이미지의 자식으로 넣어줬습니다.

 (UI - Toggle)

 

Toggle은 클릭할 때마다 체크 표시가 온/오프가 됩니다.

이걸로 오디오의 온/오프 시스템을 추가할 것입니다.

 

[GameManager.cs]

    public AudioSource audioBgm;
    public AudioSource audioEffect;
    public Toggle toggleBgm;
    public Toggle toggleEffect;

    public bool isOnBgm = true;
    public bool isOnEffect = true;    
    
    // 세팅버튼을 누를 때 호출.
    public void OnClick_BtnSoundSetting(bool isActive)
    {
        // 세팅버튼 누르면 액티브, 안에서 나가기 버튼을 누르면 디액티브.
        objSoundSetting.SetActive(isActive);
    }
    // 세팅창에서 배경음토글 버튼을 클릭할 때 호출.
    public void OnClick_ToggleBgm()
    {
        if (isOnBgm)
            isOnBgm = false;
        else
            isOnBgm = true;

        toggleBgm.isOn = isOnBgm;

        //배경음 온/오프.
        if (toggleBgm.isOn == true)
            audioBgm.Play();
        else
            audioBgm.Stop();
    }
    // 세팅창에서 효과음 토글 버튼을 클릭할 때 호출.
    public void OnClick_ToggleEffect()
    {
        if (isOnEffect)
            isOnEffect = false;
        else
            isOnEffect = true;

        toggleEffect.isOn = isOnEffect;

        // 효과음 온/오프.
        if (toggleEffect.isOn == true)
            audioEffect.Play();
        else
            audioEffect.Stop();
    }

 

[Fruits.cs]

효과음은 과일이 합쳐질 때마다 들리게 할 것입니다.

void OnCollisionStay2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Circle")
        {
            Fruits other = collision.gameObject.GetComponent<Fruits>();

            if (level == other.level && !isMerge && !other.isMerge && level < 6)
            {
                float thisX = gameObject.transform.position.x;
                float thisY = gameObject.transform.position.y;
                float otherX = other.transform.position.x;
                float otherY = other.transform.position.y;

                if (thisY > otherY || (thisY == otherY && thisX > otherX))
                {
                    Merge(other.transform.position);
                    other.gameObject.SetActive(false);

                    // 합쳐지면 효과음 플레이.
                    if(GameManager.instance.isOnEffect == true)
                        GameManager.instance.audioEffect.Play();

                    LevelUp();
                }
            }
        }
    }