Unity3D_MMO - SoundManager (1)

k_hyun·2022년 10월 15일
0

Unity_MMO_Project

목록 보기
15/33

SoundManager.cs

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);
    }
}

TestSound.cs

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");
    }
}

해당 코드를 작성하여 큐브에 첨부하고 플레이 한 결과 큐브에 닿을때마다 소리가 작동함을 확인.

0개의 댓글