Unity中内嵌网页插件UniWebView使用总结
目前有三种方式可以实现在Unity工程中实现内嵌网页的功能:
1、 UnityWebCore:只支持Windows平台,调用浏览器内核,将网页渲染到mesh,作为gameObject。
2、 Unity-Webview:只适用于Andriod和ios平台,调用移动平台的Webview。
3、 UniWebView:适用于Andriod、ios和Mac os,在移动端效果最好。2.0版本之后支持WP8,不支持windows桌面系统,包括编辑器状态。
二、使用的主要思路
- <span style="font-size:18px;"> void OpenURL() //打开网址
- {
- _cachedView.TitleLabel.text = "资讯";
- _webView = _uiTrans.gameObject.GetComponent<UniWebView> ();
- if (_webView == null)
- {
- _webView=_uiTrans.gameObject.AddComponent<UniWebView>();
- //_webView.OnReceivedMessage += OnReceivedMessage;
- //_webView.OnLoadComplete += OnLoadComplete;
- //_webView.OnWebViewShouldClose += OnWebViewShouldClose;
- //_webView.OnEvalJavaScriptFinished += OnEvalJavaScriptFinished;
- _webView.InsetsForScreenOreitation += InsetsForScreenOreitation;
- }
- if(InformationManager.Instance.ArticleType == EArticleType.Notice)
- {
- _webView.url = AppManager.Instance.GameIP + "/gatj?ad=" + InformationManager.Instance.ArticleId;
- }
- else if(InformationManager.Instance.ArticleType == EArticleType.V)
- {
- _webView.url = AppManager.Instance.GameIP + "/detaifdav.jsp?articleId=" + InformationManager.Instance.VId;
- }
- _webView.Load(); //加载网页
- ShowOrHide(true); //控制显示
- }
- public void ShowOrHide(bool flag)
- {
- if(flag)
- {
- _webView.Show ();
- }
- else
- {
- _webView.Hide();
- }
- }
- void CloseWeb(UniWebView webView) //关闭网页
- {
- webView.Hide();
- UnityEngine.Object.Destroy(webView);
- //webView.OnReceivedMessage -= OnReceivedMessage;
- //webView.OnLoadComplete -= OnLoadComplete;
- //webView.OnWebViewShouldClose -= OnWebViewShouldClose;
- //webView.OnEvalJavaScriptFinished -= OnEvalJavaScriptFinished;
- webView.InsetsForScreenOreitation -= InsetsForScreenOreitation;
- _webView = null;
- }</span>
代码来自实际项目,只提供主要思路。
调用安卓和ios自身平台的方法封装在jar和mm文件中,提供了UniWebView类调用这些方法。打开网页时将UniWebView作为组件挂在一个gameObject上。将网址字符串赋值给UniWebView中的url字段,调用Load()方法加载网址,Show()方法显示在屏幕上,对应Hide()方法。关闭时,先隐藏,再销毁UniWebView组件。
UniWebView类中提供了一些回调方法,本项目中用到了UniWebViewEdgeInsets。默认打开网页是全屏方式,UniWebViewEdgeInsets是使网页偏移。也就是控制网页显示的区域和位置。需要注意,在安卓平台插入的值以像素为单位,在ios平台,因为不同机型屏幕scale值不同,同一个值插入效果不一样,建议判断机型根据效果将数值写死:
- <span style="font-size:18px;"> UniWebViewEdgeInsets InsetsForScreenOreitation(UniWebView webView, UniWebViewOrientation orientation)
- {
- #if UNITY_IOS
- var iphoneGen=UnityEngine.iOS.Device.generation;
- if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone5S)
- {
- topInset=54;
- bottomInset=34;
- }
- else if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone6)
- {
- topInset=64;
- bottomInset=40;
- }
- else if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone6Plus)
- {
- topInset=70;
- bottomInset=44;
- }
- #endif
- if (orientation == UniWebViewOrientation.Portrait)
- {
- return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
- }
- else
- {
- return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
- }
- }</span>
三、需要注意的问题
在安卓平台使用最大的问题是Unity失去焦点的问题。经过使用OnApplicationFocus方法测试,调用平台WebView打开界面时默认打开另一个Activity,Unity本身为一个Activity,当打开另外一个Activity时Unity会失去焦点,此时焦点不在Unity程序身上,如果锁屏或者按Home键再打开后只会调出最后一个显示的Activity,也就是UniWebView打开的网页,而不是Unity程序。也就是在打开网页的界面按下Home键或者锁屏后程序将无法正常返回。主要的问题在于Unity程序和打开的网页属于不同的Activity,解决的方法为更改Unity工程中的安卓配置文件,使一个Activity继承于另一个,显示在同一个Activity上。
另外,打开的网页有缓存。经过测试,在打开一个网页后,修改网页,再次打开,显示的还是之前的网页,关闭Unity程序也无法清除缓存。解决的方法为关闭网页时调用插件自身的CleanCache ()方法,清除缓存,这样每次打开的都是新的网页。
Unity中内嵌网页插件UniWebView使用总结的更多相关文章
- Unity中内嵌网页插件UniWebView
一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...
- Unity 内嵌网页
uniwebview 官网 http://uniwebview.onevcat.com/reference/class_uni_web_view.html http://uniwebview.onev ...
- 关于Unity程序在IOS和Android上显示内嵌网页的方式
近期因为有须要在Unity程序执行在ios或android手机上显示内嵌网页.所以遍从网上搜集了一下相关的资料.整理例如以下: UnityWebCore 从搜索中先看到了这个.下载下来了以后发现这个的 ...
- WPF应用程序内嵌网页
原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...
- WPF内嵌网页的两种方式
在wpf程序中,有时会内嵌网页.内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核. 一.第一种使用自带WebBrows ...
- Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互
Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...
- iOS 之 内嵌网页
现在iOS 有两种内嵌网页的技术,一种是UIWebView,而另一种WKWebView则是iOS8之后出现的技术. iOS 之 UIWebView WKWebView
- [小程序开发] 微信小程序内嵌网页web-view开发教程
为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...
- APP中内嵌H5页面为什么不能下载?
在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...
随机推荐
- windows下at命令使用详解
T命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排.任务的管理.工作事务的处理方面,AT命令具有更强大更神通的功能.AT命令可在指定时间和日期.在指 ...
- 强大的vim配置文件,让编程更随意(转)
欢迎来到小码哥的博客 博客搬家啦 blog.ma6174.com 强大的vim配置文件,让编程更随意 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直 ...
- struts2 页面向Action传参方式
1.基本属性注入 我们可以直接将表单数据项传递给Action,而Action只需要提供基本的属性来接收参数即可,这种传参方式称为基本属性注入.例如 jsp页面: <s:form method=& ...
- windows开了远程控制访问老提示密码账号不正确
今天搞windows忽然遇到一件诡异的事情 今天想开一个远程控制,点吧点吧该做的事情做了,服务也开了,防火墙都直接关了,然后用另一台电脑访问,总是提示凭证(密码账户)不对,这账号信息我输的是百分之一百 ...
- linux下的ssh与ssh客户端
经常会看到ssh客户端,或者听到ssh到某台机器..问题:ssh和ssh客户端什么关系? 1.ssh,secure shell,是一种网络交互协议,也指实现该协议的网络服务程序.主要用于远程机器管理, ...
- maven分开打包jar文件和依赖jar包和资源文件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- 从零開始学android<ScrollView滚动视图.十八.>
因为手机屏幕的高度有限.所以假设面对组件要显示多组信息的时候,ScrollView视图(滚动视图)能够有效的安排这些组件,浏览时能够自己主动的进行滚屏的操作. android.widget.Scrol ...
- 多线程-wait/notify/notifyAll
引言 在Java中,可以通过配合调用Object对象的wait,notify和notifyAll来实现线程间的通信. 在线程中调用wait方法,将阻塞带带其他线程的通知(其他线程调用notify或no ...
- h5-文本框
h5-文本框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- linux学习笔记28--监控命令vmstat,iostat, lsof
linux的监控包括多个方面,常用的是进程,内存,I/O,磁盘空间这三个方面. vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程. ...