Unity加载电脑本地音乐文件夹下所有音乐文件,C#动态加载本地音乐文件夹下所有音乐文件

 以下代码是一次性把音乐文件夹下的音乐文件都加载了出来,无论使用到还是未使用到,都会加载存储到列表中,如音乐文件比较多,则加载时间比较长

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

 

 

----------DirectoruInfo类-------
Create() 创建文件夹
CreateSubdirectory() 创建子文件夹
GetDirectories() 获取所有子文件夹信息  返回DirectoryInfo数组类型    可以对子文件夹做其他操作
GetFiles()获取文件下所有子文件信息 返回FileInfo数组类型  可以对子文件进行其它操作 比如读和写
Root 获取根目录信息  返回DirectoryInfo类型
Parent 获取父目录的信息 返回DirectoryInfo类型

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要让unity3d读取文件夹下所有mp3文件,我们可以通过C#脚本来实现。首先,我们需要获取指定文件夹路径下的所有文件,然后筛选出mp3文件并进行读取。 首先,我们可以使用Directory类的GetFiles方法来获取指定文件夹下的所有文件路径,然后使用foreach循环逐个遍历这些文件路径。 在遍历过程中,可以利用Path类的GetExtension方法来判断文件的扩展名是否为".mp3",如果是的话,就可以使用Unity的AudioSource来进行音频文件的读取和播放。 具体的代码实现如下: ```csharp using System.IO; using UnityEngine; public class ReadMP3Files : MonoBehaviour { public string folderPath; void Start() { string[] files = Directory.GetFiles(folderPath); foreach (string file in files) { if (Path.GetExtension(file).Equals(".mp3", System.StringComparison.InvariantCultureIgnoreCase)) { StartCoroutine(LoadAndPlayMP3(file)); } } } IEnumerator LoadAndPlayMP3(string filePath) { WWW www = new WWW("file://" + filePath); yield return www; AudioSource audioSource = gameObject.AddComponent<AudioSource>(); audioSource.clip = www.GetAudioClip(false, true, AudioType.MPEG); audioSource.Play(); } } ``` 在这段代码中,我们首先通过Directory类的GetFiles方法获取了指定文件夹下的所有文件路径,然后利用Path类的GetExtension方法判断文件扩展名是否为".mp3",如果是的话就使用WWW类加载音频文件,并通过AudioSource组件进行播放。同时,我们也可以通过修改folderPath的值来指定不同的文件夹路径。 这样,就可以让unity3d读取文件夹下所有mp3文件并进行播放了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值