原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1128/212.html
Unity AudioSourceManager (一行代码播放指定BGM)
此脚本是我们常州手机游戏开发培训-幻天网络继上次发布的管理脚本新增的一些内容
可以 现在可以播放长音效,
比如BGM 创建不销毁 自动循环
短音效如 按键声音 播放完毕自动删除 等功能
using System.Collections;
using System.Collections.Generic;
using DevelopEngine;
using UnityEngine;
/// <summary>
/// 音频管理脚本
/// </summary>
public class AudioSourceManager : MonoBehaviour
{
private static AudioSourceManager _instance;
private static AudioSourceManager Instance
{
get { return _instance; }
}
private void Awake()
{
_instance = this;
}
private AudioSource audioSource;
private List<AudioSource> audioSourceList = new List<AudioSource>();
/// <summary>
/// 调用测试
/// </summary>
private void Test()
{
//TODO 音频文件需要放在 Resources/Music 下方 BMG为文件名
PlayAudio("BGM");
}
/// <summary>
/// 调整音效时更新音量
/// </summary>
public void UpdateAudioVal()
{
foreach (AudioSource val in audioSourceList)
{
//便利所有的Bgm ,设置音量
if (val)
{
val.volume = PlayerPrefs.GetFloat("BgmVal");
}
}
}
/// <summary>
/// 删除指定音效
/// </summary>
/// <param name="audioName">被删除的音乐</param>
public void DeleteAudio(string audioName)
{
foreach (AudioSource val in audioSourceList)
{
if (val&& val.clip.name == audioName)
{
//audioSourceList.Remove(val);
Destroy(val.gameObject);
}
}
}
/// <summary>
/// 音乐暂停
/// </summary>
/// <param name="isStop">是否暂停</param>
public void StopAudio(bool isStop)
{
foreach (AudioSource val in audioSourceList)
{
if (isStop && val)
{
val.Pause();
}
else if (val)
{
val.Play();
}
}
}
/// <summary>
/// 判断当前音乐是否存在
/// </summary>
/// <param name="audioName">音乐名字</param>
/// <returns></returns>
public bool AudioIsTrue(string audioName)
{
foreach (AudioSource val in audioSourceList)
{
if (val && val.clip.name == audioName)
{
return true;
}
}
return false;
}
/// <summary>
/// 音乐播放方法
/// </summary>
/// <param name="name">音乐名字</param>
/// <param name="type">1是短音效 0是背景音乐</param>
/// <param name="DontDestroy">是否不删除</param>
public void PlayAudio(string name, int type = 1,bool DontDestroy = false)
{
//创建一个空物体
GameObject obj = new GameObject();
if (DontDestroy)
{
DontDestroyOnLoad(obj);
}
//给空物体添加音效
audioSource = obj.AddComponent<AudioSource>();
//加载音效
AudioClip au = Resources.Load<AudioClip>("Music/" + name);
//赋值
audioSource.clip = au;
//如果是Bgm
if (type == 0)
{
audioSource.loop = true;
audioSource.volume = PlayerPrefs.GetFloat("BgmVal");
//如果是长音效 将音效添加到List里
audioSourceList.Add(audioSource);
}
else
{
//获取音量
audioSource.volume = PlayerPrefs.GetFloat("SoundVal");
//如果是短音效播放完销毁自己
StartCoroutine(RemoAudio(obj, audioSource));
}
//开始播放音效
audioSource.Play();
}
/// <summary>
/// 销毁音效
/// </summary>
/// <param name="obj"></param>
/// <param name="audioClip"></param>
private IEnumerator RemoAudio(GameObject obj, AudioSource audioClip)
{
if (audioClip && obj)
{
yield return new WaitForSeconds(audioClip.clip.length);
Destroy(obj);
}
}
上篇:上一篇:Unity两中方式加载图片
下篇:下一篇:c#引用类型与值类型的区别大盘点