Unity中使用WebView
Unity中使用WebView
@(設計)
需求,最近游戲中需要引入H5直播頁面和更新比較頻繁的賽事頁面,需求包括:加密傳參數、和Unity交互,在Unity框架下其實有幾種方案:
不過實際需求中不在使用瀏覽器自身的導航欄,而是全屏顯示并且使用自己的導航系統,這個就有點糾結,因為上述兩種打開之后都會有默認的導航條,這種情況下只能寄希望引入第三方組件來解決這個問題,比如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的時候直接把網頁隱藏,再激活的時候再打開網頁,后面是否會有問題還不得而知:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客园积分规则
- 下一篇: 20155203 - 杜可欣 - 预备作