public class SoundManager
{
// 오디오 소스를 생성, Bgm, Effet, etc..
AudioSource[] _audioSources = new AudioSource[(int)Define.Sound.MaxCount];
// 사운드 관련 게임오브젝트를 생성해서 @Sound산하로 넣는다.
// 게임오브젝트는 대응하는 AudioSource 컴포넌트를 가진다.
public void Init()
{
GameObject root = GameObject.Find("@Sound");
if (root == null)
{
root = new GameObject { name = "@Sound" };
Object.DontDestroyOnLoad(root);
string[] soundNames = System.Enum.GetNames(typeof(Define.Sound));
for (int i=0; i<soundNames.Length - 1; i++)
{
GameObject go = new GameObject { name = soundNames[i] };
_audioSources[i] = go.AddComponent<AudioSource>();
go.transform.parent = root.transform;
}
_audioSources[(int)Define.Sound.Bgm].loop = true;
}
}
// 오디오 클립을 폴더에서 가져와서 재생한다.
// Bgm과 Effect 두가지로 나눠 구현
public void Play(Define.Sound type, string path, float pitch = 1.0f)
{
if (path.Contains("Sounds/") == false)
path = $"Sounds/{path}";
if (type == Define.Sound.Bgm)
{
AudioClip audioclip = Managers.Resource.Load<AudioClip>(path);
if (audioclip == null)
{
Debug.Log($"AudioClip Missing ! {path}");
return;
}
}
else
{
AudioClip audioclip = Managers.Resource.Load<AudioClip>(path);
if (audioclip == null)
{
Debug.Log($"AudioClip Missing ! {path}");
return;
}
AudioSource audioSource = _audioSources[(int)Define.Sound.Effect];
audioSource.pitch = pitch;
audioSource.PlayOneShot(audioclip);
}
}
public class TestSound : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Managers.Sound.Play(Define.Sound.Bgm, "UnityChan/univ0001");
Managers.Sound.Play(Define.Sound.Effect, "UnityChan/univ0002");
Debug.Log("Test");
}
}
해당 코드를 작성하여 큐브에 첨부하고 플레이 한 결과 큐브에 닿을때마다 소리가 작동함을 확인.