Unity开发—内嵌浏览器

2018-12-16  本文已影响0人  Webber_

    前后在2个项目组,都接到了内嵌浏览器的需求。一个是端游,要在windows平台为游戏加入内嵌浏览器;一个是手游,需要在Android和IOS中植入。所以在这里记录一下解决方案。

    手游比较方便处理,由于手机屏幕小,过小的页面反而不容易看清楚。所以即使直接跳转至系统浏览器,在某些情况下,也并不会显得很突兀。如果确定要内置,让玩家看起来是游戏内的UI,而不是切换了游戏窗口,那么可以有两种实现方式:

    1.在Android/IOS层做一个非全尺寸固定位置的内嵌窗口,使之看起来属于游戏内的UI,而不是调用了系统浏览器。此方案由另一位同事提议,笔者没有实际去试,但是应该行得通,因为和SDK的弹出框是一个思路。

    2.使用第三方插件。目前使用最广泛,且操作简单,功能齐全的就是UniWebView了,支持Android、IOS、MacOS三个平台。UniWebView于2013年发布首个版本1.0.1,截至目前,最新版本已至3.9.0。支持的Unity版本也从4升级到了2018。笔者所在项目组已上线运营6个月,所以兼容性和稳定性并不存在大的问题。其中UniWebView3对UI显示和性能进行了大版本优化,推荐使用。

UniWebView官方地址:https://docs.uniwebview.com/
附另一款插件地址:https://assetstore.unity.com/packages/tools/gui/in-app-web-browser-57532

UniWebView
    端游相比手游麻烦一点,其实AssetStore窗口就是一个内嵌网页,但Unity并没有开放相关接口访问,编辑器方法也没有。但是还是可以找到2种其他内嵌方案,方案二为笔者项目组采用方案:

    1.C++手工绘制窗口边框,调用系统浏览器,将位置固定在窗口内,从而达到内嵌效果。

    2.使用第三方插件。AssetStore有一个付费版插件—Embedded Browser,可以把网页数据渲染到游戏内Mesh或Image上,支持Flash、JavaScripts、h.264/mp3等,功能强大。还有一个开源插件—SimpleUnityBrowser,它和Embedded Browser实现方式基本一致,都是使用了CEFChromium嵌入式框架,在其基础上将web数据渲染至游戏内对象。具体来说,整个插件分为2部分:1.调用Chrome浏览器进程访问用户希望打开的网页,并将网页数据发送至共享内存,2.游戏内的引擎部分负责把共享内存中的网页数据拿出来渲染至游戏UI Or场景对象。所以运行中,可以在任务管理器中看到浏览器进程和共享内存进程。

SimpleUnityBrowser官方地址:https://bitbucket.org/vitaly_chashin/simpleunitybrowser/overview

SimpleUnityBrowser
上一篇下一篇

猜你喜欢

热点阅读