Unity中使用WebView

@(设计)

需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数、和Unity交互,在Unity框架下其实有几种方案:

  1. 内置函数Application.OpenURL()接口
  2. 引入的Apollo自带的OpenUrl(引入了LBS X5内核)
    不过实际需求中不在使用浏览器自身的导航栏,而是全屏显示并且使用自己的导航系统,这个就有点纠结,因为上述两种打开之后都会有默认的导航条,这种情况下只能寄希望引入第三方组件来解决这个问题,比如Uniwebview或者其他的。

实现原理

浏览了一遍第三方组件,比如Github上的
https://github.com/gree/unity-webview 、 https://github.com/Kogarasi/Unity-Webview 或者Unity Store上的UniWebView,其原理离不开Android WebView , Android与我也是陌生人,具体大家可以查看github的代码吧

UniWebview

处理Apollo之外,第三方网页支持工作用的比较多可能的就是这个了.基于Android WebView开发,支持Android和IOS , 效率我没具体测试过,先给个下载地址吧:
Uniwebview-2.9.1 百度网盘下载

里面带的例子看完基本上就可以使用,主要关注几个回调接口的使用,包里面带有Android实现源码。
如果想参考手册,这里:
http://uniwebview.onevcat.com/manual(这个可以认真看下)
http://uniwebview.onevcat.com/reference/class_uni_web_view.html

如果想看中文具体的用法:
Unity中内嵌网页插件 UniWebView 2.8使用
Unity中内嵌网页插件UniWebView使用总结

附带自己使用UniWebView实现的一个库:代码链接 , 不过我的应该场景只用打开一个

遇到的问题

# 1.焦点问题

Unity工程是MainActivity ,网页是另外一个Activity, 通过监听Unity OnApplicationFocus 函数就会发现打开网页之后MainActivity会失去焦点。如果这个时候锁屏或者点击Home键,然后重新打开游戏就会发现网页是打开了,但是游戏是黑屏的,网页和Unity的通信也断开了(游戏处于Pause状态),更悲剧的是页面也关闭不了了。

优雅的解决方案,可以参考官网的说法:

In same the <activity...> tag, change the value of android:name to "com.onevcat.uniwebview.AndroidPlugin". This will use the UniWebView's activity to start your game. By doing so we, can avoid some issues for web view in Android. If you are using a main activity other than com.unity3d.player.UnityPlayerNativeActivity, com.unity3d.player.UnityPlayerActivity or com.unity3d.player.UnityPlayerProxyActivity, you have to modify the source code shipped with UniWebView to your own customization. Please refer to the next section Recompile Guide to know more about it.

具体做法可以参考:http://uniwebview.onevcat.com/manual
不过我使用的方式更粗暴一点,在Unity进入Pause的时候直接把网页隐藏,再激活的时候再打开网页,后面是否会有问题还不得而知:

    void OnApplicationPause(bool pauseStatus){if (pauseStatus == true) {if (mIsVisible){mCurrentView.Hide();isNeedResume = true;}}else{if (isNeedResume){mCurrentView.Show();}isNeedResume = false;}}

2. 网页清除

经过测试,在打开一个网页后,修改网页,再次打开,显示的还是之前的网页,关闭Unity程序也无法清除缓存。解决的方法为关闭网页时调用插件自身的CleanCache ()方法,清除缓存,这样每次打开的都是新的网页。我做的可能稍稍麻烦点。在每次关闭的时候都会进行这个处理:

  while (mCurrentView.CanGoBack()){mCurrentView.GoBack();}SetVisible(false);mCurrentView.CleanCache();mCurrentView.CleanCookie();

3. WebView 兼容性问题

Android我确实是学半天就开始用了,自觉是个易上手难精通的东西,对于WebView在不同系统不用机型下的情况不甚了解,不过H5开发那边强制接入腾讯浏览器X5内核,过程不算很难,可以参考:http://x5.tencent.com/doc?id=1003, 不过有点问题是不能直接使用MSDK的jar包直接进行开发(X5的版本太老,后续会更新),所以有导入了一份X5的jar包。

4. 视频全屏播放问题

http://blog.csdn.net/lx331675996/article/details/50634670

5. Manifest 配置

注意最后硬件加速和窗口的配置

       <activity android:name="com.onevcat.uniwebview.AndroidPlugin"android:label="uniwebview"android:hardwareAccelerated="true"android:windowSoftInputMode = "stateHidden|adjustResize"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /><meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" /></activity>

引申

Unity与Android交互:

https://docs.unity3d.com/Manual/PluginsForAndroid.html
Unity3D研究院之在Android中打开WebView
Unity3D研究院之打开Activity与调用JAVA代码传递参数

uniwebview 数据通信方式

https://developer.android.com/reference/android/webkit/WebView.html
WebView详解与简单实现Android与H5互调
Android中Java与JavaScript交互的几种方式

uniwebview重编译问题

UniWebView问题总结

附带测测试工程:http://git.oschina.net/rubbyzhang/UniWebView

转载于:https://www.cnblogs.com/zsb517/p/6188544.html

Unity中使用WebView相关推荐

  1. Unity中Android API 28之后无法HTTP请求

    本文节选自洪流学堂公众号技术专栏<大话Unity2019>,未经允许不可转载. 洪流学堂公众号回复log,获取最新版运行时查看日志的工具. 小新:"最近我升级到Android A ...

  2. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  3. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  4. 在Unity中制作4种不同的游戏

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:8.6 GB 含课程素材 |时长:15h ...

  5. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  6. Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity

    Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:A ...

  7. android webview详情,Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...

  8. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  9. Xamarin.Forms中为WebView指定数据来源Source

    Xamarin.Forms中为WebView指定数据来源Source 网页视图WebView用来显示HTML和网页形式内容.使用这种方式,可以借助网页形式进行界面设计,并利于更新和维护.WebView ...

最新文章

  1. powerbook g4装linux,揭秘:服务器操作系统Linux版本发行
  2. 孙正义:互联网流量将转化为智能AI流量,我的时代终于来了
  3. 文字收缩下面半透明效果
  4. 2019 课程设计个人报告
  5. MySQL数据库应用第3章操作数据库
  6. locate 和 find
  7. linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务
  8. Git 错误解决和解析 - error: path ‘xxx‘ is unmerged
  9. Ubuntu 12.10方便操作套件
  10. VC、VS、QT界面预览快捷键小记
  11. 78M05-ASEMI三端正线性稳压器78M05
  12. 最强大脑记忆曲线(9)——按错误频率排序待听写内容
  13. 如何辨别BGP带宽的真假?
  14. solidworks背景改为纯白色
  15. python求三重积分_三重积分的Python数值计算
  16. [翻译]Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  17. qq登录界面句柄_注册QQ飞车日服账号
  18. 光猫通过 Telnet 修改自带 WLAN 功能 SSID 强制 ChinaNet- 问题
  19. Fragment的onCreate和onCreateView区别
  20. net.sf.json

热门文章

  1. 第一个SSM整合的Maven入门级项目(超详细步骤)
  2. 将数据库的0和1显示为jsp页面的是和否
  3. 构建良好的敏捷团队氛围
  4. 互联网运营人员不得不知的14款工具神器
  5. C#开发人员应该知道的13件事情
  6. Linux 批量修改文件名
  7. oracle 物化视图 ORA-23413: 表 xxx.xx 不带实体化视图日志
  8. 分享一些书籍,方方面面,很多值得一读
  9. C语言 · 交换Easy
  10. Oracle RESETLOGS 和 NORESETLOGS 区别说明