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