博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity3D 音频播放
阅读量:1985 次
发布时间:2019-04-27

本文共 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
(); 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; } }}
其中DestroyselfByTime脚本如下

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/

你可能感兴趣的文章
vue使用iconfont
查看>>
linux 查看文件夹权限
查看>>
linux tar 备份
查看>>
ubuntu中配置任意应用的快捷键
查看>>
ln 命令 硬链接
查看>>
chkconfig使用和级别介绍
查看>>
ubuntu 快捷键
查看>>
linux 根目录下文件夹分析
查看>>
My notes about backup to ubuntu
查看>>
linux 查看分区和文件大小
查看>>
Not using PCAP_FRAMES 解释(snort中)
查看>>
技术转管理?这些“坑”你要绕道走
查看>>
领域驱动设计(DDD)前夜:面向对象思想
查看>>
Ubuntu 14.04 安装TM2009/QQ
查看>>
Camera驱动调试小记
查看>>
Android触摸屏校准方法
查看>>
readb(), readw(), readl(),writeb(), writew(), writel() 宏函数
查看>>
linux嵌入式系统开发之触摸屏---驱动篇(上/硬件原理\下/源码分析)
查看>>
对于中断函数返回值的分析
查看>>
x210——Android睡眠唤醒串口打印信息
查看>>