使用unity2020.3.0进行网络图片、音频和视频资源的加载和交互,通过网上搜索资源并结合工程实践尝试了一些操作,实现了相似的功能,在此分享给大家。
一、下载图片
曾经使用的www方式进行下载,这里使用UnityWebRequest在携程中进行下载,具体实现方式如下:
IEnumerator getImage(string url)
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
{
Debug.Log("网络错误");
}
else
{
// 网络正常情况先获取到图片的数据
byte[] results = unityWebRequest.downloadHandler.data;
// 创建一个 Texture,这个尺寸要自己定
Texture2D myTexture = new Texture2D(1, 1);
myTexture.LoadImage(results);
myTexture.Apply();
yield return new WaitForSeconds(0.01f);
if (m_videoShow != null)
{
m_videoShow.GetComponent<RawImage>().texture = myTexture;
}
yield return new WaitForSeconds(0.01f);
Resources.UnloadUnusedAssets();
}
}
二、加载网络音频
思路:可以直接加载播放;也可以下载到本地,然后进行播放。
(一)直接可以加载播放
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG))
{
yield return uwr.SendWebRequest();
if (uwr.isNetworkError)
{
Debug.LogError("uwrERROR:" + uwr.error);
m_errList.text = uwr.error;
}
else
{
GetComponent<AudioSource>().clip = DownloadHandlerAudioClip.GetContent(uwr);
}
}
GetComponent<AudioSource>().Play();
yield return new WaitForSeconds(0.01f);
Resources.UnloadUnusedAssets();
(二)下载然后播放
IEnumerator getMp3Data(string url)
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
{
// 网络错误
Debug.Log("网络错误");
}
else
{
// 网络正常情况
// 先获取到图片的数据
byte[] results = unityWebRequest.downloadHandler.data;
System.IO.File.WriteAllBytes(m_tempFTPFilePath, results);
yield return new WaitForSeconds(0.01f);
Resources.UnloadUnusedAssets();
}
PlayAudio(m_tempFTPFilePath);
}
然后进行播放,具体如下:
void PlayAudio(string urlNow)
{
//获取音频名称
string cacheUrl;
string urlOld = urlNow;
int posNow = urlNow.LastIndexOf('/');
//wav保存地址
cacheUrl = urlNow.Insert(posNow, "/Cache").Replace(".mp3", ".wav");
//判断是否已经转换过
if (!File.Exists(@cacheUrl))
{
//将MP3转换成WAV
using (var audioStrem = new Mp3FileReader(urlOld))
{
WaveFileWriter.CreateWaveFile(@cacheUrl, audioStrem);
}
}
//使用Unity加载wav音频并播放
StartCoroutine(LoadAndPlay(@cacheUrl));
}
三、播放视频
获取视频的网络地址后,使用UniversalMediaPlayer插件,设置路劲参数,可以直接播放网络视频。
以上仅供参考,请大家多多指点。