Unity中下载图片、音频和视频

使用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插件,设置路劲参数,可以直接播放网络视频。

以上仅供参考,请大家多多指点。

上一篇:Unity 基于LineRenderer组件实现连线功能


下一篇:Unity中的异步编程【4】——案例:一个按钮,一次点击后要等5秒才能再次点击