想在AR基础上显示一个透明的网页,网上找了各种资料,也试过了unity-webview,可以运行但不能透明。于是转向了uniwebview,官方介绍是可以透明,最终能成功。
首先下载插件,asset store就有。下载后点import,即可导入project。
将project中UniWebView/Prefab/UniWebViewObject拖入Hierarchy中,可以看到Inspector中可配置项,根据需求自行配置。
此时打包运行,发现成功运行。
接下来,需要将UniWebView结合EasyAR SDK使用。首先在EasyAR SDK Demo中的HelloARQRCode作为基础开发,打开项目后先修改下manifest文件(\Assets\Plugins\Android\AndroidManifest.xml),为什么要修改,因为uniwebview和HelloARQRCode他们都有manifest.xml文件,而且package不一样,把uniwebview的activity加入到EasyAR的manifest.xml中即可,导入uniwebview时不选中AndroidManifest这个文件。
在HelloARQRCode的manifest基础上添加uniwebview的activity,如图
此刻,就已经做好了基础工作,你会发现project里多了一个UniWebView的目录。
里面有Demo,可以把0-6里面的scenes都拖到Hierarchy下,然后运行看效果(这里只能打包成app在手机上运行,Windows下uniwebview不支持预览效果,网上说mac可以,但我没有尝试过。)
在Demo每个目录下有C#文件(script文件),可以打开对应每个效果的代码如何实现。基本的load网页,设置大小等操作均可在demo中学会,这里就不详述。
这里我们主要要用到uniwebview的透明效果,下面就说具体实现。
首先将Project中UniWebView目录下Prefab目录下UniWebViewObject拖到Hierarchy下,这里我拖到了
EasyAR_ImageTracker-1_QRCode-1下,如图
查看Inspector,(这里如果没有UniWebView(Script),尝试先Build一次,然后再来看就有了)如图
其中,Transform是设置大小及位置方向的,主要看UniWebView(Script)这个组件。Insets设置宽高,我这里设置如上图,你可以试试其他的值看看效果。Url配置默认的网址,Load On Start勾选后运行即会开始load网址,Auto Show When Loaded勾选后在网址load完毕后显示,Tool Bar Show这里主要考虑到有些手机没有返回键(如iphone),在上方显示前进后退等操作按钮。可以先把默认url设置好并把所有的都勾选上然后build看看效果。我这里需要代码动态加载url并且控制load和show的时机,所以这里都不勾选。
点击UniWebView(Script)右边设置按钮,Edit Script,打开visual studio ,基本上每个方法的作用都有注释,说的很清楚。
然后会发现一个方法,如图
可以设置背景透明,但是提示这个方法已过时,建议使用SetBackgroundColor代替。于是我们找到SetBackgroundColor
注释已说明在IOS上,当web页面没有设定好的background才会生效,在WP8不支持这个操作。但我这里想要运行的环境为android和ios,因此我需要先准备一个web页面,背景透明。(web页面透明方法网上有很多,自己随便写一个即可)
然后回到unity编辑器,选中Hierarchy下EasyAR_ImageTracker-1_QRCode-1,编辑右边组件ARGlobalSetupBehaviour(Script)。
这里可以稍微了解下整个运行过程中的调用过程,可以加Debug.log()。
首先定义一个UniwebView的变量。
private UniWebView _webview;
var webViewGameObject = GameObject.Find("WebView");
if (webViewGameObject == null)
{
webViewGameObject = new GameObject("WebView");
}
_webview = webViewGameObject.AddComponent();
_webview.OnWebViewShouldClose += onWebviewClose;
_webview.OnLoadComplete += OnLoadComplete;
_webview.SetBackgroundColor(new Color(1, 1, 1, 0));
_webview.url = QRcodeInfo;
_webview.Load();
其中
_webview.SetBackgroundColor(new Color(1, 1, 1, 0));
为设置背景透明。url里用的二维码上的信息,即web页面地址。