🐧 들어가기 앞서

주말이다!

주말에도 열심히 과제를 구현했다.

토요일은 UI를 전체적으로 통일했고,

오늘은 오디오를 재생할 수 있게 기능을 구현했다!


🐧 오늘 배운 것

09.09 - UI
09.10 - Audio


🐧 기억할 것 & 진행

골드메탈님의 강의를 통해 배열로 다양한 소리를 관리하는 AudioManger 제작방법을 알게 됐다.

약간의 응용이 필요했는데, 강의는 단일 Scene에서 모든게 이루어지지만,

팀 프로젝트는 StartScene과 MainScene에서 이뤄진다.

그래서, 게임을 플레이하는 GameManager는 MainScene에 존재하는데,

AudioManager를 어디에 둬야할지 고민이었다.

답은 간단했다!

게임이 시작되고, 처음 Audio가 나오는 Scene은 StartScene다.

따라서 StartScene에 구현했다!

🎇 UI

UI는 MainScene의 GameOver와 전체적인 UI 디자인을 통일했다.

🎈 BGM

BGM 은 StartScene과 MainScene에서 재생된다.

📜 AudioManger.cs

배열로 설정하자

[Header("#BGM")]
    public AudioClip[] bgmClip;
    public float bgmVolume;
    public int bgmChannels;
    AudioSource[] bgmPlayers;
    int bgmChannelIndex;

enum을 이용해서 각 BGM의 Index를 설정한다.

public enum Bgm { StartScene, MainScene }

AudioManger를 싱글톤화하고, MainScene으로 전환되어도 파괴되지 않게

DontDestroyOnLoad

를 사용했다.

void Awake()
    {
        instance = this;
        Init();
        // MainScene으로 넘어가도 파괴되지 않게 설정.
        DontDestroyOnLoad(this.gameObject);
    }

Init으로 초기화를 진행한다.

// 배경음 초기화
        GameObject bgmObject = new GameObject("BgmPlayer");
        bgmObject.transform.parent = transform;
        bgmPlayers = new AudioSource[bgmChannels];

        for(int bgmIndex = 0; bgmIndex < bgmPlayers.Length; bgmIndex++)
        {
            bgmPlayers[bgmIndex] = bgmObject.AddComponent<AudioSource>();
            bgmPlayers[bgmIndex].playOnAwake = false;
            bgmPlayers[bgmIndex].volume = bgmVolume;
        }

이후 플레이 메서드를 구현하면 끝!

public void PlayBgm(Bgm bgm)
    {
        for(int index = 0; index < bgmPlayers.Length; index++)
        {
            int loopIndex = (index + bgmChannelIndex) % bgmPlayers.Length;

            if (bgmPlayers[loopIndex].isPlaying)
            {
                continue;
            }
            bgmChannelIndex = loopIndex;
            bgmPlayers[loopIndex].clip = bgmClip[(int)bgm];
            bgmPlayers[loopIndex].Play();
            break;
        }
    }

다른 함수에서, AudioManger에 접근하려면 해당 함수를 사용하면 된다.

AudioManager.instance.PlayBgm(AudioManager.Bgm.MainScene);

🐧 게임에 구현한다면?


🐧 내일 할 일

에셋 제작하기, BGM 찾기, UI 수정하기

0개의 댓글