minhd
12/31/2017 - 11:35 AM

SoundEffectManager.cs

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;

public class SoundEffectManager : MonoBehaviour {

	static private AudioSource audioSource;
	static private Dictionary<string, AudioClip> audios;
	static private string targetPath = "SE";

	private void Awake () {
		audios = new Dictionary<string, AudioClip> ();
		object[] files = Resources.LoadAll (targetPath);
		foreach (AudioClip file in files) {
			audios [file.name] = file;
		}
	}

	public void Play (string filename, float delaySec = 0.0f, float volume = 1.0f) {
		audioSource.volume = volume;
		Observable.Timer(TimeSpan.FromMilliseconds(delaySec * 1000))
			.Subscribe(_ => 
				audioSource.PlayOneShot (audios [filename] as AudioClip));
	}

	public void Stop () {
		audioSource.Stop ();
	}
		
	
	private static SoundEffectManager _instance;
	public static SoundEffectManager Instance {
		get {
			if( _instance == null ) {
				GameObject go = new GameObject ("SoundEffectManager");
				_instance = go.AddComponent<SoundEffectManager>();
				audioSource = go.AddComponent<AudioSource> ();
				audioSource.playOnAwake = false;
				DontDestroyOnLoad (go);
			}
			return _instance;
		}
	}

}