纳金网
标题: 内嵌网页插件UniWebView使用总结 [打印本页]
作者: 710960383 时间: 2017-2-8 09:17
标题: 内嵌网页插件UniWebView使用总结
一、目前有三种方式可以实现在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.
13. _webView.InsetsForScreenOreitation += InsetsForScreenOreitation;
14. }
15.
16. if(InformationManager.Instance.ArticleType == EArticleType.Notice)
17. {
18. _webView.url = AppManager.Instance.GameIP + "/gatj?ad=" + InformationManager.Instance.ArticleId;
19. }
20. else if(InformationManager.Instance.ArticleType == EArticleType.V)
21. {
22. _webView.url = AppManager.Instance.GameIP + "/detaifdav.jsp?articleId=" + InformationManager.Instance.VId;
23. }
24. _webView.Load(); //加载网页
25. ShowOrHide(true); //控制显示
26. }
27.
28. public void ShowOrHide(bool flag)
29. {
30. if(flag)
31. {
32. _webView.Show ();
33. }
34. else
35. {
36. _webView.Hide();
37. }
38. }
39.
40. void CloseWeb(UniWebView webView) //关闭网页
41. {
42. webView.Hide();
43. UnityEngine.Object.Destroy(webView);
44. //webView.OnReceivedMessage -= OnReceivedMessage;
45. //webView.OnLoadComplete -= OnLoadComplete;
46. //webView.OnWebViewShouldClose -= OnWebViewShouldClose;
47. //webView.OnEvalJavaScriptFinished -= OnEvalJavaScriptFinished;
48. webView.InsetsForScreenOreitation -= InsetsForScreenOreitation;
49. _webView = null;
50. }</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.
22. if (orientation == UniWebViewOrientation.Portrait)
23. {
24. return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
25. }
26. else
27. {
28. return new UniWebViewEdgeInsets(topInset,0,bottomInset,0);
29. }
30. }</span>
三、需要注意的问题
在安卓平台使用最大的问题是Unity
失去焦点的问题。经过使用OnApplicationFocus
方法测试,调用平台WebView
打开界面时默认打开另一个Activity
,Unity
本身为一个Activity
,当打开另外一个Activity
时Unity
会失去焦点,此时焦点不在Unity
程序身上,如果锁屏或者按Home
键再打开后只会调出最后一个显示的Activity
,也就是UniWebView
打开的网页,而不是Unity
程序。也就是在打开网页的界面按下Home
键或者锁屏后程序将无法正常返回。主要的问题在于Unity
程序和打开的网页属于不同的Activity
,解决的方法为更改Unity
工程中的安卓配置文件,使一个Activity
继承于另一个,显示在同一个Activity
上。 另外,打开的网页有缓存。经过测试,在打开一个网页后,修改网页,再次打开,显示的还是之前的网页,关闭Unity程序也无法清除缓存。解决的方法为关闭网页时调用插件自身的CleanCache ()方法,清除缓存,这样每次打开的都是新的网页。
转自:http://blog.csdn.net/onafioo/article/details/51943624
欢迎光临 纳金网 (http://go.narkii.com/club/) |
Powered by Discuz! X2.5 |