目前有三种方式可以实现在Unity工程中实现内嵌网页的功能:

1、  UnityWebCore:只支持Windows平台,调用浏览器内核,将网页渲染到mesh,作为gameObject。

2、  Unity-Webview:只适用于Andriod和ios平台,调用移动平台的Webview。

3、  UniWebView:适用于Andriod、ios和Mac os,在移动端效果最好。2.0版本之后支持WP8,不支持windows桌面系统,包括编辑器状态。

二、使用的主要思路

  1. <span style="font-size:18px;">        void OpenURL()  //打开网址
  2. {
  3. _cachedView.TitleLabel.text = "资讯";
  4. _webView = _uiTrans.gameObject.GetComponent<UniWebView> ();
  5. if (_webView == null)
  6. {
  7. _webView=_uiTrans.gameObject.AddComponent<UniWebView>();
  8. //_webView.OnReceivedMessage += OnReceivedMessage;
  9. //_webView.OnLoadComplete += OnLoadComplete;
  10. //_webView.OnWebViewShouldClose += OnWebViewShouldClose;
  11. //_webView.OnEvalJavaScriptFinished += OnEvalJavaScriptFinished;
  12. _webView.InsetsForScreenOreitation += InsetsForScreenOreitation;
  13. }
  14. if(InformationManager.Instance.ArticleType == EArticleType.Notice)
  15. {
  16. _webView.url = AppManager.Instance.GameIP + "/gatj?ad=" + InformationManager.Instance.ArticleId;
  17. }
  18. else if(InformationManager.Instance.ArticleType == EArticleType.V)
  19. {
  20. _webView.url = AppManager.Instance.GameIP + "/detaifdav.jsp?articleId=" + InformationManager.Instance.VId;
  21. }
  22. _webView.Load();    //加载网页
  23. ShowOrHide(true);       //控制显示
  24. }
  25. public void ShowOrHide(bool flag)
  26. {
  27. if(flag)
  28. {
  29. _webView.Show ();
  30. }
  31. else
  32. {
  33. _webView.Hide();
  34. }
  35. }
  36. void CloseWeb(UniWebView webView)   //关闭网页
  37. {
  38. webView.Hide();
  39. UnityEngine.Object.Destroy(webView);
  40. //webView.OnReceivedMessage -= OnReceivedMessage;
  41. //webView.OnLoadComplete -= OnLoadComplete;
  42. //webView.OnWebViewShouldClose -= OnWebViewShouldClose;
  43. //webView.OnEvalJavaScriptFinished -= OnEvalJavaScriptFinished;
  44. webView.InsetsForScreenOreitation -= InsetsForScreenOreitation;
  45. _webView = null;
  46. }</span>

代码来自实际项目,只提供主要思路。

调用安卓和ios自身平台的方法封装在jar和mm文件中,提供了UniWebView类调用这些方法。打开网页时将UniWebView作为组件挂在一个gameObject上。将网址字符串赋值给UniWebView中的url字段,调用Load()方法加载网址,Show()方法显示在屏幕上,对应Hide()方法。关闭时,先隐藏,再销毁UniWebView组件。

UniWebView类中提供了一些回调方法,本项目中用到了UniWebViewEdgeInsets。默认打开网页是全屏方式,UniWebViewEdgeInsets是使网页偏移。也就是控制网页显示的区域和位置。需要注意,在安卓平台插入的值以像素为单位,在ios平台,因为不同机型屏幕scale值不同,同一个值插入效果不一样,建议判断机型根据效果将数值写死:

  1. <span style="font-size:18px;">        UniWebViewEdgeInsets InsetsForScreenOreitation(UniWebView webView, UniWebViewOrientation orientation)
  2. {
  3. #if UNITY_IOS
  4. var iphoneGen=UnityEngine.iOS.Device.generation;
  5. if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone5S)
  6. {
  7. topInset=54;
  8. bottomInset=34;
  9. }
  10. else if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone6)
  11. {
  12. topInset=64;
  13. bottomInset=40;
  14. }
  15. else if(iphoneGen==UnityEngine.iOS.DeviceGeneration.iPhone6Plus)
  16. {
  17. topInset=70;
  18. bottomInset=44;
  19. }
  20. #endif
  21. if (orientation == UniWebViewOrientation.Portrait)
  22. {
  23. return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
  24. }
  25. else
  26. {
  27. return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
  28. }
  29. }</span>

三、需要注意的问题

在安卓平台使用最大的问题是Unity失去焦点的问题。经过使用OnApplicationFocus方法测试,调用平台WebView打开界面时默认打开另一个Activity,Unity本身为一个Activity,当打开另外一个Activity时Unity会失去焦点,此时焦点不在Unity程序身上,如果锁屏或者按Home键再打开后只会调出最后一个显示的Activity,也就是UniWebView打开的网页,而不是Unity程序。也就是在打开网页的界面按下Home键或者锁屏后程序将无法正常返回。主要的问题在于Unity程序和打开的网页属于不同的Activity,解决的方法为更改Unity工程中的安卓配置文件,使一个Activity继承于另一个,显示在同一个Activity上。

另外,打开的网页有缓存。经过测试,在打开一个网页后,修改网页,再次打开,显示的还是之前的网页,关闭Unity程序也无法清除缓存。解决的方法为关闭网页时调用插件自身的CleanCache ()方法,清除缓存,这样每次打开的都是新的网页。

Unity中内嵌网页插件UniWebView使用总结的更多相关文章

  1. Unity中内嵌网页插件UniWebView

    一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...

  2. Unity 内嵌网页

    uniwebview 官网 http://uniwebview.onevcat.com/reference/class_uni_web_view.html http://uniwebview.onev ...

  3. 关于Unity程序在IOS和Android上显示内嵌网页的方式

    近期因为有须要在Unity程序执行在ios或android手机上显示内嵌网页.所以遍从网上搜集了一下相关的资料.整理例如以下: UnityWebCore 从搜索中先看到了这个.下载下来了以后发现这个的 ...

  4. WPF应用程序内嵌网页

    原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...

  5. WPF内嵌网页的两种方式

    在wpf程序中,有时会内嵌网页.内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核. 一.第一种使用自带WebBrows ...

  6. Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互

    Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...

  7. iOS 之 内嵌网页

    现在iOS 有两种内嵌网页的技术,一种是UIWebView,而另一种WKWebView则是iOS8之后出现的技术. iOS 之 UIWebView WKWebView

  8. [小程序开发] 微信小程序内嵌网页web-view开发教程

    为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...

  9. APP中内嵌H5页面为什么不能下载?

    在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...

随机推荐

  1. vim 中Taglist的安装和使用

    将vim 改造成功能强大的IDE系列之二 『插件介绍』 Taglist是vim的一个插件,提供源代码符号的结构化视图. 效果图:(直接使用了别人的图片.在我机器上也差不多-) 『下载和安装』 1)从h ...

  2. UE添加鼠标右键打开

    重装了下系统,有一些工具,不用重新安装还是能用的,比如UE.pl/sql,就当是绿色软件了.但是有些在鼠标右键里的功能没有了 ,比如UE的右键打开. 可以这样修改:打开UltraEdit->高级 ...

  3. 关于nodejs中npm命令没有反应的解决方法

    最近在学习angularJS,正在做一个单页面应用,在安装nodejs之后,发现命令行传了输入npm -v能输出结果外,其余npm的任何操作都没有反应,一开始我以为是下载的比较慢,等了半小时还是没动静 ...

  4. 设置SSH编码为中文

    http://www.qzz.in/?post=198下面是详细方法: 方法1: vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" ...

  5. 修改easyui panel 默认样式

    有这么个需求需要修改easyui panel头部中的背景色.于是根据panel中的最终被浏览器解析出来的类名,直接修改这个css样式,设置backgroud-color这个属性,发现不管用. 于是,就 ...

  6. Linux命令-网络命令:last

    last 统计linux系统所有用户的登录时间(多次登录信息)

  7. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  8. 开始使用Bootstrap

    bootstrap使用到的图标字体文件格式有 .woff,IIS7下需要添加MIME映射:.woff  application/x-font-woff

  9. Jumpserver web界面跳板机

    Jumpserver.org 普通用户 仪表盘 查看主机 上传下载 访问官网 欢迎使用Jumpserver开源跳板机系统 帮助 Log out 查看资产 仪表盘 资产管理 查看资产 主机详细信息列表 ...

  10. Windows下Python添加MySQLdb扩展模块

    [更新 2012-09-16] 这里可以下载已经打包好的EXE文件,http://sourceforge.net/projects/mysql-python/(国内需穿越才可访问) DBank备份下载 ...