使用版本2020.
目标:在unity工程中读取工程之外的一个音乐文件,进行播放。可以在工程外动态随时修改音乐歌曲。
---如果不想看文字,或者看不懂的,也可以看视频教程---我公众号里有。公众号:unity风雨路。
---下面开始:
新建一个相机,然后把audio source 和Audio Listener组件加上。之后再加入一个脚本Exposure_voice。如下图:
脚本Exposure_voice的详细代码如下:
using UnityEngine;
using System.Collections;
using System.IO;
using System;
using System.Text;
public class Exposure_voice : MonoBehaviour {
private string url_voice;//歌曲文件名
private string get_url;//歌曲文件所在位置。例如MP3……
string Musicpath = "musicpath.txt";
public AudioClip myclip;//音乐文件
public AudioSource AS;
void Start()
{
ArrayList arrlist = Exposure_voice.LoadFile(System.Environment.CurrentDirectory, Musicpath);
string lines;
foreach (string str in arrlist)
{
lines = str;
url_voice = lines;
Debug.Log("歌曲名是什么" + lines);
}
//外部加载声音的路径,拼接www下载文件路径
get_url = "file://"+ System.Environment.CurrentDirectory +"//"+ url_voice + ".mp3";
Debug.Log("url+++" + get_url);
StartCoroutine("DownloadVoice");
}
//c#读取文件的方法
public static ArrayList LoadFile(string path, string name)
{
StreamReader sr = null;
try
{
sr = File.OpenText(path + "//" + name);
}
catch (Exception e)
{
Debug.Log("没有文件" + e.Message);
return null;
}
string line;
ArrayList arrList = new ArrayList();
while ((line = sr.ReadLine()) != null)
{
arrList.Add(line);
}
sr.Close();
sr.Dispose();
return arrList;
}
[Obsolete]
IEnumerator DownloadVoice()
{
WWW w = new WWW(get_url);
yield return w;
//将声音资源赋值为外部加载的声音即可//
myclip = w.GetAudioClip();
AS.clip = myclip;
Debug.Log("音乐"+myclip.loadState+myclip.name);
// AS.Play();
}
}
代码是本文的核心,也是实现从外部加载音乐的核心。
从代码中可看出,只要找到当前路径下的音乐文件就可以了。
为了方便更换音乐文件,所以在musicpath这个文本文件中写入了音乐文件的名字。
注意:musicpath这个文本文件中写入的内容必须是音乐文件的名字。例如歌曲名是“张三”,那么musicpath这个文本文件中写入的字符串必须是“张三”。
最终打包之后。音乐文件以及musicpath这个文本文件是和打包后的exe运行程序同级目录的。