박민혁의 개발
유니티 사운드 매니저 본문
사운드 매니저 코드
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public enum BGM // enum 값 후에 string 으로 찾기에 이름을 잘적어둬야함
{
GoingUp,
Catch,
Shooting,
}
public class SoundManager : MonoBehaviour
{
private static SoundManager _instance;
public static SoundManager Instance { get => _instance; }
[SerializeField] private AudioMixerGroup _bgmGroup;
private AudioSource _bgmSource;
private SFX _sfxOrigin;
private const string BGM_PATH = "Sounds/BGM/"; //찾는 경로
private const string SFX_PATH = "Sounds/SFX";
private Dictionary<string, AudioClip> _bgms = new Dictionary<string, AudioClip>();
private void Awake()
{
if (_instance == null)
{
_instance = this;
DontDestroyOnLoad(gameObject);
_bgmSource = gameObject.AddComponent<AudioSource>();
_bgmSource.outputAudioMixerGroup = _bgmGroup;
_bgmSource.playOnAwake = false;
_bgmSource.loop = true;
}
else
{
Destroy(gameObject);
return;
}
_sfxOrigin = Resources.Load<SFX>(SFX_PATH);
string[] names = Enum.GetNames(typeof(BGM));
foreach (string name in names)
{
_bgms.Add(name, Resources.Load<AudioClip>($"{BGM_PATH}{name}"));
}
}
public void PlayBGM(BGM bgm)
{
if (_bgmSource.isPlaying)
_bgmSource.Stop();
_bgmSource.clip = _bgms[bgm.ToString()];
_bgmSource.Play();
}
public void StopBGM()
{
_bgmSource.Stop();
}
public void PlaySFX(AudioClip clip)
{
SFX sfx = Instantiate(_sfxOrigin);
sfx.Play(clip);
}
}
이런식으로 사운드 소스를 매니저 하나를 만들어서 관리할시 소리 조절 기능을 만들수 있는듯함
그러나 아직 거기까지 가기엔 내 이해도가 부족함
'TIL' 카테고리의 다른 글
플레이어 상태 머신 (1) | 2023.10.23 |
---|---|
애니메이션 점프 중 상승 상태 하강 상태 (0) | 2023.10.20 |
조던 메크너의 게임 제작 20가지 팁 (1) | 2023.10.17 |
유니티 멀티 포톤 (0) | 2023.10.16 |
유니티 깃 머지 주의사항 (0) | 2023.10.13 |