Unity中访问 URL

Posted Raki_0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中访问 URL相关的知识,希望对你有一定的参考价值。

一、第一种:使用URL直接连接

将此连接方法写在需要连接的时候即可,比如下面写在Button点击事件里;这种方式是跳出unity打开浏览器

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

二、第二种:使用www访问URL

VS显示www已过时
这种方式是跳出unity打开浏览器

 public void ConnectUrl()
    
        WWW www = new WWW("http://www.baidu.com");//外部html和本地HTML都可
		Application.OpenURL(www.url);
    

三、第三种:使用UnityWebRequest 访问URL

这种方式是跳出unity打开浏览器

  1. 浏览器HTML
//新版UnityWebRequest
    public void ConnectUrl1()
    
        UnityWebRequest unityWebRequest = new UnityWebRequest("https://www.csdn.net/");
        Application.OpenURL(unityWebRequest.url);
    
  1. 本地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);
    
  • ./是当前目录
  • . ./是父级目录
  • /是根目录

四、第四种:使用Embedded Browser插件

这种方式是在unity里打开URL
详情见Embedded Browser插件的使用

五、第五种:使用UniWebView插件

这种方式是在unity里打开URL
详情见UniWebView插件的使用

参考网址:
https://cloud.tencent.com/developer/article/1865441

Unity零基础到进阶 ☀️| 一篇文章 学会在Unity中访问 URL 连接网页 和 下载图片文件

📢前言

  • 最近在开发应用,有需求是通过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不能使用,所以我们一般用
编码

UnityWebRequest.EscapeURL(string url);
UnityWebRequest.EscapeURL(string url,Encoding e);

解码

UnityWebRequest.UnEscapeURL(string url);
UnityWebRequest.UnEscapeURL(string url,Encoding e);

实例

        string ccc = UnityWebRequest.UnEscapeURL("%e4%b8%ad%e5%9b%bd%e4%b8%96%e7%95%8c%e7%ac%ac%e4%b8%80%ef%bc%81", System.Text.Encoding.GetEncoding("utf-8"));//url 编码 转中文
        Debug.Log(ccc);
        
         string aaa = UnityWebRequest.EscapeURL("中国世界第一!");//中文转url编码
        Debug.Log(aaa);

在这里插入图片描述


💬总结

一直以为使用Unity访问URL很难,原来学习了才知道原来这么简单😘

不知道你学废了没呢?🥰

在这里插入图片描述

以上是关于Unity中访问 URL的主要内容,如果未能解决你的问题,请参考以下文章

生死狙击微端unity引擎显示游戏崩溃

有没有人知道unity引擎下载的东西放在哪一个文件

游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

3d游戏引擎都有哪些?

用Unity3d开发游戏的优点有哪些

在 Unity 5 中使用 .NET 4.5 代码