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

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

生活随笔

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

编程问答

Unity中内嵌网页插件 UniWebView 2.8使用

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

2016.10.22 ? 孫廣東 ?

http://blog.csdn.net/u010019717

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? UniWebView2:適用于Andriod、ios和Mac os,在移動(dòng)端效果最好。支持WP8,不支持windows桌面系統(tǒng),包括編輯器狀態(tài)。? Unity4.x版本是 UniWebView

Unity AssetStore 上的插件: https://www.assetstore.unity3d.com/en/#!/content/32461? ? ? ??

? ? ? ? ? ? ?在Unity中主要用于活動(dòng),就想《陰陽(yáng)師》 ?手游!



?


開(kāi)發(fā)有些不方便,因?yàn)椴恢С?/span>window下的 Editor的調(diào)試!,? 只能在Mac下!

?

使用的主要思路

???? 插件的 官網(wǎng) ;?? http://uniwebview.onevcat.com/

下載插件然后安裝導(dǎo)入 Unity
?

使用 Prefab 和設(shè)置 URL .

??????? 從 UniWebView/Prefab 文件夾下 拖拽 UniWebViewObject ?預(yù)制體,在Inspector 上設(shè)置 URL(在Windows上也設(shè)置不了), Mac 上Play就可以看到效果, 但是在Window上要打包成移動(dòng)包才行。

?????????

?

UniWebView的工作方式

?

????????? 在Mac 系統(tǒng)下可以設(shè)置 UniWebView組件上的:? Insets 能控制 web 視圖的大小。Start函數(shù)中加載(Load On Start )和加載完成時(shí)自動(dòng)顯示(Auto Show WhenLoad Complete )。

?

?

?????????? 除了顯示 web 頁(yè)面的基本用法,UniWebView 有一些其他重要的功能、 與Unity場(chǎng)景通信, 偵聽(tīng) web 頁(yè)event事件和計(jì)算一些 javascript。

???????? 請(qǐng)參閱詳細(xì)的在線手冊(cè) http://uniwebview.onevcat.com/manual

???????? 和腳本引用 http://uniwebview.onevcat.com/reference/class_uni_web_view.html 。

?

?

通過(guò)腳本設(shè)置? UniWebView? 加載Web 內(nèi)容并顯示:

?????? 假設(shè), 你在 UniWebView.cs? 腳本的所在對(duì)象上有一個(gè)腳本,??其中定義了字段:

private UniWebView _webView;

??? 你可以通過(guò)這樣的方式 得到 引用:

var _webView = gameObject.GetComponent<UniWebView>();

?????? // 監(jiān)聽(tīng)事件

_webView.OnLoadComplete += OnLoadComplete; _webView.OnReceivedMessage += OnReceivedMessage; _webView.OnEvalJavaScriptFinished +=OnEvalJavaScriptFinished;

??????????? 然后? 設(shè)置 Web 頁(yè)面的大小? 和你 想要加載頁(yè)面的Url :

?

_webView.insets = newUniWebViewEdgeInsets(5,5,5,5); // 距離全屏差5個(gè)像素 _webView.url = "http://uniwebview.onevcat.com/demo/index.html";

?

???????????? 設(shè)置完成后,收到調(diào)用加載 頁(yè)面 :

_webView.Load();

?

?????????? 頁(yè)面加載成功或者失敗的??完成回調(diào)函數(shù)大致如下:

voidOnLoadComplete(UniWebView webView, bool success, string errorMessage) {if (success) {// 顯示 加載完成的界面webView.Show();} else {// 輸出 錯(cuò)誤碼Debug.LogError("Something wrong in webview loading: " + errorMessage);} }

?

如果 不想監(jiān)聽(tīng)(其實(shí)是不處理失敗檢測(cè))和自己處理這個(gè) OnLoadComplete ?事件,可以 設(shè)置屬性:??????? 你好像也可以 先調(diào)用 Show() ?函數(shù),然后在調(diào)用 Load(), 函數(shù)。

autoShowWhenLoadComplete = true;

Web頁(yè)面和? Unity游戲邏輯的通信

一、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

? 將被解析為:

path = "move" args = {direction ="up",distance ="1" }

?

你在 監(jiān)聽(tīng)了 OnReceivedMessage 事件 的回調(diào)中, 會(huì)得到 UniWebViewMessage對(duì)象,然后實(shí)現(xiàn)自己的邏輯:????????? (自己注:? 在游戲中我們通常點(diǎn)擊了活動(dòng)的每個(gè)標(biāo)簽或者 Button可能是頁(yè)面切換,可能是Button的網(wǎng)絡(luò)請(qǐng)求,? 都可以以這種方式來(lái)弄!? 如果是C#寫(xiě)邏輯,那不就沒(méi)有了一些熱更新的優(yōu)勢(shì)了???)

voidOnReceivedMessage(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"} }

?

關(guān)于更多的? url 方法可以看:? AddUrlScheme 這個(gè)API 函數(shù)

http://uniwebview.onevcat.com/reference/class_uni_web_view.html#a785e560917f32efe65d91874c632f7d5

?

?

二、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é)果。

?

?

其他功能:

http://uniwebview.onevcat.com/manual

?

X??????背景透明-在 iOS 中,默認(rèn)情況下web 視圖還有一個(gè)灰色的背景 。你可以使用 SetTransparentBackground 來(lái)設(shè)置為 背景透明。

?

X??????加載進(jìn)度框 -? 就是表示加載進(jìn)度,以改善體驗(yàn)。您可以禁用 和 通過(guò)SetShowSpinnerWhenLoading 和SetSpinnerLabelText 自定義標(biāo)簽文本。

?

X ? ? ?Back 按鍵 和導(dǎo)航工具欄按鈕支持-用戶(hù)可以使用后退按鈕在 web 頁(yè)面之間導(dǎo)航,Android 設(shè)備上像在本機(jī)瀏覽器中一樣。Ios 是一個(gè)帶有導(dǎo)航按鈕的默認(rèn)工具欄。

?

X ? ? ?向前 和 向后 ,瀏覽器的兩個(gè)行為,您可以在你的游戲中控制網(wǎng)頁(yè)導(dǎo)航,通過(guò) GoBack 和GoForward 方法。

?

X ? ? ? ? 清理緩存-web 視圖將保持 url 請(qǐng)求,默認(rèn)情況下,這可能會(huì)使舊的頁(yè)面顯示。

即使您更新您的 web 頁(yè)。使用 CleanCache 來(lái)解決這一問(wèn)題。

?

X ? ? ? 在web 視圖? 播放 youtube 視頻 -只需加載url,它就如此簡(jiǎn)單的播放。

?

X ? ? ? 加載本地文件?和 html 字符串-? 給定設(shè)置 本地文件的 url,或 調(diào)用 LoadHTMLString 具有 html字符串的值,您可以加載本地的內(nèi)容。

?

X ? ? ? ?更多使用- 你不能只用它來(lái)加載 html 和web 頁(yè),而且還顯示一些圖像。

?

X 不止一個(gè) web 視圖-? 如果您希望在你的游戲中顯示 多個(gè) web 視圖,那就是 有多個(gè) 掛有UniWebView 組件的GameObject 而已。。

?

?

?

設(shè)置? AndroidManifest.xml???

??????????????? 因?yàn)?Unity垮平臺(tái), 肯定會(huì)使用第三方或者自己擴(kuò)展的android 插件, 就需要維護(hù)同一個(gè) AndroidManifest.xml? 文件,? 需要合并每個(gè)插件的需求 (解決沖突)。

????????

http://uniwebview.onevcat.com/manual.html#merge_instruction

?

?

????????????? 在導(dǎo)入這個(gè)插件之前, 如果在您的項(xiàng)目中已經(jīng)有一個(gè)AndroidManifest.xml 文件,你不應(yīng)該從 UniWebView 包導(dǎo)入 AndroidManifest.xml 文件了(如果沒(méi)有就直接全部導(dǎo)入就行了)。? 而是您需要手動(dòng)更新該文件。?? 其實(shí)是相當(dāng)簡(jiǎn)單,只需不到2 分鐘 。

?

???????????? 你可以遵循這些步驟,使其正常工作︰

1. ???在項(xiàng)目中的?Assets/Plugins/Android?? 路徑下 ,使用文本編輯器打開(kāi)? AndroidManifest.xml? 文件。

?

2. ? ? ? 文件中 搜索??android.intent.action.MAIN(肯定有且只有一個(gè))???????然后按照下面的步驟操作:

?

Merge(合并)

(1)?? 上面步驟二的搜索結(jié)果位于<activity>與</activity> 標(biāo)記對(duì)之間。? 然后插入下面兩行數(shù)據(jù):

<meta-dataandroid:name="android.app.lib_name" android:value="unity"/> <meta-dataandroid:name="unityplayer.ForwardNativeEventsToDalvik"android:value="true" />

?聲明:?這個(gè)插件本人并沒(méi)有在實(shí)際項(xiàng)目中使用,??所有觀點(diǎn)都是個(gè)人理解,???給大家?guī)?lái)不便表示抱歉!

(2)? 同樣的在<activity...> 標(biāo)記中,將 android: name 的值更改為"com.onevcat.uniwebview.AndroidPlugin"。這將使用 UniWebView 的activity 來(lái)啟動(dòng)你的游戲。這樣做,這樣我們可以避免 web 視圖在 安卓系統(tǒng)的一些問(wèn)題(類(lèi)似的問(wèn)題網(wǎng)上也是有人 提到過(guò):

? ? ? ? ? ? ??“在安卓平臺(tái)使用最大的問(wèn)題是Unity失去焦點(diǎn)的問(wèn)題。經(jīng)過(guò)使用OnApplicationFocus方法測(cè)試,調(diào)用平臺(tái)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.UnityPlayerNativeActivitycom.unity3d.player.UnityPlayerActivitycom.unity3d.player.UnityPlayerProxyActivity 其中之一的話(huà),您必須修改UniWebView源代碼 修改到你的activity名字上。? 請(qǐng)參閱重新編譯的指南 http://uniwebview.onevcat.com/manual#manual-recompile ,更多地了解它。


(3) 同樣的在 <activity...> 標(biāo)記中,添加 android: hardwareAccelerated ="true"android:windowSoftInputMode="adjustResize" 。這將使安卓系統(tǒng)提供 html5功能。


最總?? 會(huì)變成這樣的格式:

<activityandroid:name="com.onevcat.uniwebview.AndroidPlugin"android:label="@string/app_name"android:hardwareAccelerated="true"android:windowSoftInputMode="adjustResize"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER"/></intent-filter><meta-data android:name="android.app.lib_name"android:value="unity" /><meta-dataandroid:name="unityplayer.ForwardNativeEventsToDalvik"android:value="true" /> </activity>

?

(4) 最后,添加訪問(wèn)互聯(lián)網(wǎng)的權(quán)限, 如果有了就不用添加了。 在</manifest> 標(biāo)記? 之前 添加:

?

<uses-permissionandroid:name="android.permission.INTERNET" />


?http://blog.csdn.net/u010019717

?

插件Demo的一些 在安卓手機(jī)上的截圖:



?



總結(jié)

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

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