Unity 实战项目 ☀️| 一篇文章 学会在Unity中访问 URL 连接网页 和 下载图片、文件
- 📢博客主页:https://blog.csdn.net/zhangay1998
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 God_Y 原创🙉
- 📢未来很长,值得我们全力奔赴更美好的生活✨
📢前言
- 最近在开发应用,有需求是通过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很难,原来学习了才知道原来这么简单😘
不知道你学废了没呢?🥰
华为云活动
最近华为云的服务器在搞活动,大家有需求的可以扫码仔细了解以下哦!
也可以点击链接查看详细活动
有需求的小伙伴快来看一下吧!!
- 点赞
- 收藏
- 关注作者
评论(0)