日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Unity中使用WebView

發(fā)布時(shí)間:2025/3/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity中使用WebView 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Unity中使用WebView

@(設(shè)計(jì))

需求,最近游戲中需要引入H5直播頁(yè)面和更新比較頻繁的賽事頁(yè)面,需求包括:加密傳參數(shù)、和Unity交互,在Unity框架下其實(shí)有幾種方案:

  • 內(nèi)置函數(shù)Application.OpenURL()接口
  • 引入的Apollo自帶的OpenUrl(引入了LBS X5內(nèi)核)
    不過(guò)實(shí)際需求中不在使用瀏覽器自身的導(dǎo)航欄,而是全屏顯示并且使用自己的導(dǎo)航系統(tǒng),這個(gè)就有點(diǎn)糾結(jié),因?yàn)樯鲜鰞煞N打開(kāi)之后都會(huì)有默認(rèn)的導(dǎo)航條,這種情況下只能寄希望引入第三方組件來(lái)解決這個(gè)問(wèn)題,比如Uniwebview或者其他的。
  • 實(shí)現(xiàn)原理

    瀏覽了一遍第三方組件,比如Github上的
    https://github.com/gree/unity-webview 、 https://github.com/Kogarasi/Unity-Webview 或者Unity Store上的UniWebView,其原理離不開(kāi)Android WebView , Android與我也是陌生人,具體大家可以查看github的代碼吧

    UniWebview

    處理Apollo之外,第三方網(wǎng)頁(yè)支持工作用的比較多可能的就是這個(gè)了.基于Android WebView開(kāi)發(fā),支持Android和IOS , 效率我沒(méi)具體測(cè)試過(guò),先給個(gè)下載地址吧:
    Uniwebview-2.9.1 百度網(wǎng)盤(pán)下載

    里面帶的例子看完基本上就可以使用,主要關(guān)注幾個(gè)回調(diào)接口的使用,包里面帶有Android實(shí)現(xiàn)源碼。
    如果想?yún)⒖际謨?cè),這里:
    http://uniwebview.onevcat.com/manual(這個(gè)可以認(rèn)真看下)
    http://uniwebview.onevcat.com/reference/class_uni_web_view.html

    如果想看中文具體的用法:
    Unity中內(nèi)嵌網(wǎng)頁(yè)插件 UniWebView 2.8使用
    Unity中內(nèi)嵌網(wǎng)頁(yè)插件UniWebView使用總結(jié)

    附帶自己使用UniWebView實(shí)現(xiàn)的一個(gè)庫(kù):代碼鏈接 , 不過(guò)我的應(yīng)該場(chǎng)景只用打開(kāi)一個(gè)

    遇到的問(wèn)題

    # 1.焦點(diǎn)問(wèn)題

    Unity工程是MainActivity ,網(wǎng)頁(yè)是另外一個(gè)Activity, 通過(guò)監(jiān)聽(tīng)Unity OnApplicationFocus 函數(shù)就會(huì)發(fā)現(xiàn)打開(kāi)網(wǎng)頁(yè)之后MainActivity會(huì)失去焦點(diǎn)。如果這個(gè)時(shí)候鎖屏或者點(diǎn)擊Home鍵,然后重新打開(kāi)游戲就會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)是打開(kāi)了,但是游戲是黑屏的,網(wǎng)頁(yè)和Unity的通信也斷開(kāi)了(游戲處于Pause狀態(tài)),更悲劇的是頁(yè)面也關(guān)閉不了了。

    優(yōu)雅的解決方案,可以參考官網(wǎng)的說(shuō)法:

    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
    不過(guò)我使用的方式更粗暴一點(diǎn),在Unity進(jìn)入Pause的時(shí)候直接把網(wǎng)頁(yè)隱藏,再激活的時(shí)候再打開(kāi)網(wǎng)頁(yè),后面是否會(huì)有問(wèn)題還不得而知:

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

    2. 網(wǎng)頁(yè)清除

    經(jīng)過(guò)測(cè)試,在打開(kāi)一個(gè)網(wǎng)頁(yè)后,修改網(wǎng)頁(yè),再次打開(kāi),顯示的還是之前的網(wǎng)頁(yè),關(guān)閉Unity程序也無(wú)法清除緩存。解決的方法為關(guān)閉網(wǎng)頁(yè)時(shí)調(diào)用插件自身的CleanCache ()方法,清除緩存,這樣每次打開(kāi)的都是新的網(wǎng)頁(yè)。我做的可能稍稍麻煩點(diǎn)。在每次關(guān)閉的時(shí)候都會(huì)進(jìn)行這個(gè)處理:

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

    3. WebView 兼容性問(wèn)題

    Android我確實(shí)是學(xué)半天就開(kāi)始用了,自覺(jué)是個(gè)易上手難精通的東西,對(duì)于WebView在不同系統(tǒng)不用機(jī)型下的情況不甚了解,不過(guò)H5開(kāi)發(fā)那邊強(qiáng)制接入騰訊瀏覽器X5內(nèi)核,過(guò)程不算很難,可以參考:http://x5.tencent.com/doc?id=1003, 不過(guò)有點(diǎn)問(wèn)題是不能直接使用MSDK的jar包直接進(jìn)行開(kāi)發(fā)(X5的版本太老,后續(xù)會(huì)更新),所以有導(dǎo)入了一份X5的jar包。

    4. 視頻全屏播放問(wèn)題

    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中打開(kāi)WebView
    Unity3D研究院之打開(kāi)Activity與調(diào)用JAVA代碼傳遞參數(shù)

    uniwebview 數(shù)據(jù)通信方式

    https://developer.android.com/reference/android/webkit/WebView.html
    WebView詳解與簡(jiǎn)單實(shí)現(xiàn)Android與H5互調(diào)
    Android中Java與JavaScript交互的幾種方式

    uniwebview重編譯問(wèn)題

    UniWebView問(wèn)題總結(jié)

    附帶測(cè)測(cè)試工程:http://git.oschina.net/rubbyzhang/UniWebView

    轉(zhuǎn)載于:https://www.cnblogs.com/zsb517/p/6188544.html

    總結(jié)

    以上是生活随笔為你收集整理的Unity中使用WebView的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。