使用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插件,设置路劲参数,可以直接播放网络视频。
以上仅供参考,请大家多多指点。