unity内置浏览器插件UniWebView的使用(支持Android,ios,Mac)
下載
UniWebView這個(gè)插件支持Android、IOS和Mac,不支持Windows。
百度網(wǎng)盤(pán)下載鏈接:
https://pan.baidu.com/s/1wM7frlsW4qdiUA0WHu7exA
提取碼:sel8
Unity Asset Store下載鏈接:
https://assetstore.unity.com/packages/tools/network/uniwebview-3-92605
價(jià)格: $25
用法
添加UniWebView在一個(gè)GameObject上
對(duì)UniWebView.url賦值
可以設(shè)置一些在打開(kāi)瀏覽器的時(shí)候的一些回調(diào)
設(shè)置webview的長(zhǎng)寬高,這里都可以直接在ui上面顯示瀏覽器
webView.insets = new UniWebViewEdgeInsets(5,5,5,5);然后調(diào)用webView.Load()方法即可
Web頁(yè)面和 Unity游戲邏輯的通信
1. UniWebView發(fā)送消息給 Unity
這個(gè)建議使用 url 方案。UniWebView 將監(jiān)聽(tīng) 以 uniwebview://開(kāi)始 的 url
如果玩家在 Web 頁(yè)面點(diǎn)擊了 Url 鏈接, UniWebView 將會(huì)解析為一個(gè) UniWebViewMessage 對(duì)象 ,然后引發(fā) OnReceivedMessage 事件。 一個(gè) UniWebViewMessage 對(duì)象包含 一個(gè)路徑字符串(其中有url 和args 參數(shù)字典)。
例如當(dāng)點(diǎn)擊了鏈接 : uniwebview://move?direction=up&distance=1
將被解析為:
你在 監(jiān)聽(tīng)了 OnReceivedMessage 事件 的回調(diào)中, 會(huì)得到 UniWebViewMessage對(duì)象,然后實(shí)現(xiàn)自己的邏輯
void OnReceivedMessage(UniWebView webView, UniWebViewMessage message) {Debug.Log(message.rawMessage);if (string.Equals(message.path,"move")) {// It is time to move!// In this example:// message.args["direction"] = "up"// message.args["distance"] = "1"} }2. Unity發(fā)送消息到 UniWebView
你可以運(yùn)行任何的 javescript 頁(yè)面, 通過(guò)使用 EvaluatingJavaScript 你能調(diào)用并運(yùn)行Javascript, 這個(gè)JavaScript代碼可以是你游戲腳本中的字符串形式。 你能監(jiān)聽(tīng) OnEvalJavaScriptFinished 事件, 來(lái)處理這個(gè)結(jié)果。
Android設(shè)置AndroidManifest.xml
在導(dǎo)入這個(gè)插件之前, 如果在您的項(xiàng)目中已經(jīng)有一個(gè)AndroidManifest.xml 文件,你不應(yīng)該從 UniWebView 包導(dǎo)入 AndroidManifest.xml 文件了(如果沒(méi)有就直接全部導(dǎo)入就行了),而是您需要手動(dòng)更新該文件。
1 在項(xiàng)目中的 Assets/Plugins/Android路徑下 ,使用文本編輯器打開(kāi) AndroidManifest.xml文件
2 文件中 搜索 android.intent.action.MAIN(肯定有且只有一個(gè)),然后按照下面的步驟操作:
上面步驟2的搜索結(jié)果位于<activity>與</activity>標(biāo)記對(duì)之間,插入下面兩行數(shù)據(jù)
3 在<activity...>標(biāo)記中,將 android: name的值更改為"com.onevcat.uniwebview.AndroidPlugin"。這將使用 UniWebView 的activity 來(lái)啟動(dòng)你的游戲。這樣做,這樣我們可以避免 web 視圖在 安卓系統(tǒng)的一些問(wèn)題
在安卓平臺(tái)使用最大的問(wèn)題是Unity失去焦點(diǎn)的問(wèn)題。經(jīng)過(guò)使用OnApplicationFocus方法測(cè)試,調(diào)用WebView打開(kāi)界面時(shí)默認(rèn)打開(kāi)另一個(gè)Activity,Unity本身為一個(gè)Activity,當(dāng)打開(kāi)另外一個(gè)Activity時(shí)Unity會(huì)失去焦點(diǎn),此時(shí)焦點(diǎn)不在Unity程序身上,如果鎖屏或者按Home鍵再打開(kāi)后只會(huì)調(diào)出最后一個(gè)顯示的Activity,也就是UniWebView打開(kāi)的網(wǎng)頁(yè),而不是Unity程序。也就是在打開(kāi)網(wǎng)頁(yè)的界面按下Home鍵或者鎖屏后程序?qū)o(wú)法正常返回。主要的問(wèn)題在于Unity程序和打開(kāi)的網(wǎng)頁(yè)屬于不同的Activity,解決的方法為更改Unity工程中的安卓配置文件,使一個(gè)Activity繼承于另一個(gè),顯示在同一個(gè)Activity上。
如果你的MainActivity 使用的不是 com.unity3d.player.UnityPlayerNativeActivity、 com.unity3d.player.UnityPlayerActivity或com.unity3d.player.UnityPlayerProxyActivity其中之一的話(huà),您必須修改UniWebView源代碼 修改到你的activity名字上
4 同樣的在 <activity...>標(biāo)記中,添加 android: hardwareAccelerated ="true"和android:windowSoftInputMode="adjustResize"。這將使安卓系統(tǒng)提供 html5功能
最終,會(huì)變成這樣
最后,添加訪(fǎng)問(wèn)互聯(lián)網(wǎng)的權(quán)限, 如果有了就不用添加了。 在</manifest>標(biāo)記 之前 添加
<uses-permission android:name="android.permission.INTERNET" />其他
背景透明: 在 iOS 中,默認(rèn)情況下web 視圖還有一個(gè)灰色的背景 。你可以使用 SetTransparentBackground來(lái)設(shè)置為 背景透明
加載進(jìn)度框: 就是表示加載進(jìn)度,以改善體驗(yàn)。您可以禁用 和 顯示,接口SetShowSpinnerWhenLoading;也可以自定義標(biāo)簽文本,接口SetSpinnerLabelText
Back 按鍵 和導(dǎo)航工具欄按鈕支持: 用戶(hù)可以使用后退按鈕在 web 頁(yè)面之間導(dǎo)航,Android 設(shè)備上像在本機(jī)瀏覽器中一樣。iOS 是一個(gè)帶有導(dǎo)航按鈕的默認(rèn)工具欄
向前 和 向后: 瀏覽器的兩個(gè)行為,您可以在你的游戲中控制網(wǎng)頁(yè)導(dǎo)航,通過(guò) GoBack和GoForward方法
清理緩存: web 視圖將保持 url 請(qǐng)求,默認(rèn)情況下,這可能會(huì)使舊的頁(yè)面顯示,即使您更新您的 web 頁(yè)。使用 CleanCache來(lái)解決這一問(wèn)題
視頻播放: 在web 視圖 播放視頻,只需加載url
加載本地文件 和 html 字符串: 給定設(shè)置 本地文件的 url,或 調(diào)用 LoadHTMLString具有 html字符串的值,您可以加載本地的內(nèi)容
不止一個(gè) web 視圖: 如果您希望在你的游戲中顯示 多個(gè) web 視圖,那就是 有多個(gè) 掛有UniWebView組件的GameObject 而已
總結(jié)
以上是生活随笔為你收集整理的unity内置浏览器插件UniWebView的使用(支持Android,ios,Mac)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [软技能] 请说说使用iconfont图
- 下一篇: [html] 怎样去除iOS和Andr