오늘의 학습 키워드
사운드 매니저
공부한 내용
사운드 매니저
BGM과 SFX를 나누어 사운드 매니저를 구현하였습니다.
음악 이름을 키 값으로 받고 value를 clip으로 받는 딕셔너리를 생성해 관리하도록 했습니다.
세팅 쪽 UI와 연결하여 음량이 변경되면 볼륨이 적용되도록 했습니다.
using System.Collections.Generic;
using UnityEngine;
public enum BGM
{
MainMenu,
InGame,
}
public enum SFX
{
Break,
Dead,
LifeDown,
OnHitBlock1,
OnHitBlock2,
OnHitBar,
}
public class SoundManager : MonoBehaviour
{
public enum Sounds
{
BGM,
SFX,
MaxCount,
}
private static SoundManager _instance;
public static SoundManager Instance { get => _instance; }
private AudioSource[] _audioSources = new AudioSource[(int)Sounds.MaxCount];
private const string BGM_PATH = "Sounds/BGM";
private const string SFX_PATH = "Sounds/SFX";
public Dictionary<string, AudioClip> ClipDict { get; } = new Dictionary<string, AudioClip>();
void Awake()
{
if (_instance == null)
{
_instance = this;
}
DontDestroyOnLoad(gameObject);
}
private void Start()
{
Init();
PlayBGM(BGM.InGame);
}
private void Init()
{
for (int i = 0; i < (int)Sounds.MaxCount; i++)
{
_audioSources[i] = gameObject.AddComponent<AudioSource>();
}
AudioClip[] bgms = Resources.LoadAll<AudioClip>(BGM_PATH);
foreach (AudioClip clip in bgms)
{
ClipDict.Add(clip.name, clip);
}
AudioClip[] sfxs = Resources.LoadAll<AudioClip>(SFX_PATH);
foreach (AudioClip clip in sfxs)
{
ClipDict.Add(clip.name, clip);
}
}
public void PlayBGM(BGM bgm)
{
AudioSource audioSource = _audioSources[(int)Sounds.BGM];
if (audioSource.isPlaying)
{
audioSource.Stop();
}
audioSource.clip = ClipDict[bgm.ToString()];
audioSource.Play();
}
public void PlaySFX(SFX sfx)
{
AudioSource audioSource = _audioSources[(int)Sounds.SFX];
if (audioSource.isPlaying)
{
audioSource.Stop();
}
audioSource.PlayOneShot(ClipDict[sfx.ToString()]);
}
public void SetBGMVolume(float value)
{
_audioSources[(int)Sounds.BGM].volume = value;
}
public void SetSFXVolume(float value)
{
_audioSources[(int)Sounds.SFX].volume = value;
}
}
오늘의 회고
오늘은 사운드 매니저와 리소스 연결 작업을 진행했다. 사운드 매니저는 다른 팀원 분이 하다가 내가 맡게 되었는데 내가 필요로 했던 부분을 미리 생각해놓고 있어서 그리 어려운 작업은 아니었던 것 같다. 우리가 만든 게임은 벽돌깨기 게임이고 아주 고전적인 게임이라서 리소스 찾는 작업에서 오래 걸리진 않았다. CC0인 에셋들도 존재해 사용할 수 있어서 다행이었다.
내일은 아마 미리 먼저 아이템 쪽 구현을 하는 방향으로 생각 중이다. 아니면 다른 팀원분들한테 양해를 구하고 기본적인 로직을 짜는 것을 돕는 것도 고려중이다. 소통이 중요하니 어느 방향이든 팀에 도움이 되는 쪽으로 진행했으면 좋겠다. 내일도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 27일차 TIL - CustomEditor (0) | 2023.09.13 |
---|---|
내일배움캠프 26일차 TIL - EditorWindow와 CustomEditor (0) | 2023.09.12 |
내일배움캠프 5주차 WIL - Input System (0) | 2023.09.11 |
내일배움캠프 24일차 TIL - Visual Studio 자동완성, Awake vs OnEnable (0) | 2023.09.08 |
내일배움캠프 23일차 TIL - UpScale Sampling (0) | 2023.09.07 |