本文共 2266 字,大约阅读时间需要 7 分钟。
为了方便管理,做一个音频管理器
简单代码如下,根据需要进行拓展,主要是说明方法
using UnityEngine;using System.Collections;public class AudioManager { public void Init() { m_audioContainer = new GameObject("audioContainer"); } public void PlayAudio(string audioName, bool loop = false, int frequency = 1) { if (m_audioContainer == null) Init(); GameObject audioObj = new GameObject(audioName); audioObj.transform.parent = m_audioContainer.transform; AudioSource source = audioObj.AddComponent其中DestroyselfByTime脚本如下(); source.playOnAwake = false; source.Stop(); source.clip = GlobalResource.m_audioClip; //此处可做成配置,根据audioName去查找音频资源// source.loop = loop; source.volume = 1; //音量// if (!loop) { DestroyselfByTime destroySelf = source.gameObject.AddComponent (); destroySelf.LimitTime = frequency * source.clip.length; } source.Play(); } private GameObject m_audioContainer; //音效父节点// private static AudioManager s_instance; private static readonly byte[] c_staticLocker = new byte[0]; public static AudioManager Instance { get { if (s_instance == null) { lock (c_staticLocker) { s_instance = new AudioManager(); } } return s_instance; } }}
using UnityEngine;using System.Collections;public class DestroyselfByTime : MonoBehaviour { public delegate void OnFinished(GameObject target); void Start () { m_runTime = 0; } void Update () { m_runTime += Time.deltaTime; if (m_runTime > m_limitTime) { if (OnFinishedCallBack != null) OnFinishedCallBack(gameObject); if (gameObject != null) Destroy(gameObject); } } public OnFinished OnFinishedCallBack; public float LimitTime { get { return m_limitTime; } set { m_limitTime = value; } } private float m_limitTime; private float m_runTime=0;}音效资源
GlobalResource.m_audioClip = Resources.Load("sound/dd",typeof(AudioClip)) as AudioClip;最好做成配置的,名称,音量,是否循环等等,在管理里面用容器存起来并标明状态:None,Loading,Playing,Stop,Free等
转载地址:http://lgzvf.baihongyu.com/