以下代码是一次性把音乐文件夹下的音乐文件都加载了出来,无论使用到还是未使用到,都会加载存储到列表中,如音乐文件比较多,则加载时间比较长
public class AudioManager : MonoBehaviour
{
private List<AudioClip> audioClips;//存储音乐音频
private string paht = @"D:\CloudMusic";//存储音乐的本地文件夹
void Start()
{
DirectoryInfo TheFolder = new DirectoryInfo(paht);//获取指定文件夹下的所有文件
foreach (FileInfo NextFolder in TheFolder.GetFiles())
{
url = NextFolder.OpenRead().Name;//得到每个音频完整路径
StartCoroutine ( Load(url));
}
IEnumerator Load(string url)
{
if (File.Exists(url))
{
url = "file:///" + url;
WWW www = new WWW(url);
yield return www;//等待文件加载完毕
if (www.error == null && www.isDone)
{
audioClips .Add (www.GetAudioClip());//加载每一首音乐 存到列表中
}
}
}
}
以下代码是当选择哪一首音乐则加载哪一首音乐,不会加载暂时无用的音乐文件,加载一首音乐是时间几乎可以忽略不计,
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 声音管理器
/// </summary>
public class AudioManager : MonoBehaviour
{
public static AudioManager Instance;//单例
public AudioClip audioClips;//存储音乐片段
public AudioClip GameOver;//游戏结束音乐片段
private string paht = @"D:\CloudMusic";
string url;
public RectTransform Content;//目录
public Transform ima_Music;//UI显示歌曲名字
void Awake()
{
Instance = this;
}
void Start()
{
DirectoryInfo TheFolder = new DirectoryInfo(paht);//获取指定文件夹下的所有文件
//修改目录的高 +10是因为Content挂载了布局组件Vertical Layout Group,每个物体的间隔为10 所以需要加上间隔距离
Content.sizeDelta = new Vector2(0, (ima_Music.GetComponent<RectTransform>().rect.height +10)* TheFolder.GetFiles().Length);
//TheFolder.GetDirectories()获取文件夹下所有的文件夹返回数组
//TheFolder.GetFiles()获取文件夹下所有文件 返回数组
foreach (FileInfo NextFolder in TheFolder.GetFiles())
{
url = NextFolder.OpenRead().Name;//得到每个音频完整路径
Transform music = GameObject.Instantiate(ima_Music);//创建歌曲目录
Music m = music.GetComponent<Music>();
string name = Path.GetFileNameWithoutExtension(url);//获取没有后缀的文件名
string s= Regex.Replace(name, @"[\d]", "");//正则表达式去除所有数字
m.name = s;//修改物体的名字为音乐名字
m.Name = s;//保存音乐名字
m.url = url;//保存歌曲的路径
music.GetChild(0).GetComponent<Text>().text = m.Name;//显示歌曲名字
music.SetParent(Content);//设置父物体
}
}
}
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
//加载音乐类,挂载显示音乐名字的预制体上
public class Music : MonoBehaviour
{
public string Name;//名字
public string url;//路径
//按下按钮 按下所选着的音乐按钮时,加载所对应的音乐文件
public void ButClick()
{
StartCoroutine ( Load(url));
}
IEnumerator Load(string url)
{
if (File.Exists(url))
{
url = "file:///" + url;
WWW www = new WWW(url);
yield return www;//等待文件加载完毕
if (www.error == null && www.isDone)
{
AudioManager.Instance.audioClips = www.GetAudioClip();//获取加载的音乐
//在Manager管理器脚本中 给声音组件重新赋值并播放
Manager .instance . audioSource.clip = AudioManager.Instance.audioClips;//获取音乐片段
Manager.instance. audioSource.Play();//播放
}
}
}
}
panel_Music是UI----UIScroll View