当前位置 博文首页 > God_Y:Unity零基础到进阶 ??| 一篇文章 学会在Unity中访问 URL

    God_Y:Unity零基础到进阶 ??| 一篇文章 学会在Unity中访问 URL

    作者:[db:作者] 时间:2021-06-16 18:24

    📢前言

    • 最近在开发应用,有需求是通过Unity连接外部网页 🙈
    • 在网上查了查思路,所以就来写篇博客学一下Unity怎么访问URL🙉
    • 那就来简单学习并介绍一下吧~🙊

    🎄在Unity中使用URL连接Web网页

    在网上看到有好几种方式可以访问URL,那就来简单介绍一下吧~
    先来看一下效果图
    在这里插入图片描述

    第一种:使用链接直接连接

    将此连接方法写在需要连接的时候即可,比如下面写在Button点击事件里,点击就可以访问百度。下同

        public void ConnectUrl()
        {
            Application.OpenURL("http://www.baidu.com");
        }
    

    2.通过WWW方式访问URL

    在网上看到可以通过WWW的方式访问URL,试了一下可以的,但是VS中提示已经过时了,还是来演示一下吧
    在这里插入图片描述

    //WWW
            var www = new     WWW("file:///F:/anyun/zayFileWork/UnitySDK/WebView/Assets/Vuplex/WebView/Documentation/index.html");
            Application.OpenURL(www.url);
    

    3.通过UnityWebRequest 方式访问URL

    //新版UnityWebRequest
        public void ConnectUrl1()
        {
            UnityWebRequest unityWebRequest = new UnityWebRequest("https://www.csdn.net/");
            Application.OpenURL(unityWebRequest.url);
        }
    

    4.通过本地HTML访问URL
    注意此处的html是我放在本地去加载的

    //使用绝对路径
        public void ConnectUrl1()
        {
            UnityWebRequest unityWebRequest = new UnityWebRequest("file:///F:/a/b/c/d/Assets/Vuplex/WebView/Documentation/index.html");
            Application.OpenURL(unityWebRequest.url);
        }
    
    //使用相对路径
        public void ConnectUrl2()
        {
            UnityWebRequest unityWebRequest = new UnityWebRequest(Application.dataPath + "/Resources/index.html");
            Application.OpenURL(unityWebRequest.url);
        }
    

    (1)./是当前目录
    (2). ./是父级目录
    (3)/是根目录
    在这里插入图片描述


    🔔利用URL下载文件和图片

    先来看一下演示图
    我这里是将下载的图片直接复制给了场景中的Image
    在这里插入图片描述

    通过URL 下载文件

    废话不多说,直接上代码了,将URL换一下就可以直接用
    Tips:这里的存储的本地路径一定要加上为 下载的文件—命名+后缀
    我就是没有命名加后缀,只写了个路径,一直报错也是很郁闷啊!

        public IEnumerator DownFile()
        {
            //下载路径
            string url = "file://F:/a/b/private/Tex/%E5%9C%86%E8%84%B80.jpg";
            //存储的本地路径
            string localurl = Application.dataPath + "/Resources/bb.gif";
            UnityWebRequest WebRequest = new UnityWebRequest(url);
            DownloadHandlerFile Download = new DownloadHandlerFile(localurl);
            WebRequest.downloadHandler = Download;
            yield return WebRequest.SendWebRequest();
            //等待资源下载完成
            while (!WebRequest.isDone)
            {
                yield return null;
            }
            if (string.IsNullOrEmpty(WebRequest.error))
            {
                //文件下载成功
                Debug.Log("下载成功");
            }
            else
            {
                //文件下载失败
                  Debug.Log("下载失败");
            }
        }
    

    下载图片
    亦是同理,直接上代码,替换URL可直接用
    下面还写了一个GetSpriteByTexture方法,可以将下载的图片直接转换格式赋值给我们场景中的Image使用,

        public IEnumerator DownTexture()
        {
            /*
            读取的包外路径
            当为安卓环境时需添加前缀  file://
            路径需要包含文件的后缀名
            */
            string url = "file://F:/a/b/private/Tex/%E5%9C%86%E8%84%B80.jpg";
            UnityWebRequest WebRequest = new UnityWebRequest(url);
            DownloadHandlerTexture Download = new DownloadHandlerTexture(true);
            WebRequest.downloadHandler = Download;
            yield return WebRequest.SendWebRequest();
            //等待资源下载完成
            while (!WebRequest.isDone)
            {
                yield return null;
            }
            if (string.IsNullOrEmpty(WebRequest.error))
            {
                //文件下载成功
                //读取的图片
                Texture2D rexture = Download.texture;
                
                texture2D.sprite = GetSpriteByTexture(rexture);
                Debug.Log("图片下载成功");
            }
            else
            {
                //文件下载失败
                Debug.Log("图片下载失败");
            }
        }
            //将texture转成image的Sprite
        Sprite GetSpriteByTexture(Texture2D tex)
        {
            Sprite _sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
            return _sprite;
        }
    

    读取文件一样

        public IEnumerator GetFile()
        {
            /*
            读取的包外路径
            当为安卓环境时需添加前缀  file://
            路径需要包含文件的后缀名
            */
            string url = Application.dataPath + "/Resources/bb.gif";
            UnityWebRequest WebRequest = new UnityWebRequest(url);
            DownloadHandlerBuffer Download = new DownloadHandlerBuffer();
            WebRequest.downloadHandler = Download;
            yield return WebRequest.SendWebRequest();
            //等待资源下载完成
            while (!WebRequest.isDone)
            {
                yield return null;
            }
            if (string.IsNullOrEmpty(WebRequest.error))
            {
                //文件读取成功
                //读取的数据
                var data = Download.data;
                  Debug.Log("成功");
            }
            else
            {
                //文件读取失败
                  Debug.Log("失败");
    
            }
        }
    

    Post

        public IEnumerator Post_Demo()
        {
            //Post请求的地址
            string url = "www.csdn.net";
            //Post请求的参数
            WWWForm form = new WWWForm();
            form.AddField("key1", "value1");
            form.AddField("key2", "value2");
            UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
            //发送请求
            yield return webRequest.SendWebRequest();
            if (string.IsNullOrEmpty(webRequest.error))
            {
                //Post的请求成功
                //Post请求的返回参数
                var data = webRequest.downloadHandler.text;
                Debug.Log(data);
                Postttt.text = "成功";
            }
            else
            {
                //Post的请求失败
                Postttt.text = "失败";
            }
        }
    

    Get

        public IEnumerator Get_Demo()
        {
            //Get请求的地址
            string url = "www.baidu.com";
    
            UnityWebRequest webRequest = UnityWebRequest.Get(url);
            //发送请求
            yield return webRequest.SendWebRequest();
            //等待请求完成
            while (!webRequest.isDone)
            {
                yield return null;
            }
            if (string.IsNullOrEmpty(webRequest.error))
            {
                //Get的请求成功
                //Get请求的返回参数
                var data = webRequest.downloadHandler.text;
                Debug.Log(data);
                Getttt.text = "成功";
            }
            else
            {
                //Get的请求失败
                Getttt.text = "失败";
            }
        }
    

    🎁Unity中的编码解码

    既然说到了访问读取文件,那就顺带提一下编码解码

    URL中有一些符号是不能被解析的,所以我们需要进行编码比如:=
    这个等号一般是有特殊意义的,编码后变成这个样子,就没有问题:%3d

    在Unity中System.Web.HttpUtility.UrlDecode不能使用,所以我们一般用