下载

UniWebView这个插件支持Android、IOS和Mac,不支持Windows
百度网盘下载链接:
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赋值
可以设置一些在打开浏览器的时候的一些回调

webView.OnLoadComplete += OnLoadComplete;webView.OnReceivedMessage += OnReceivedMessage;webView.OnEvalJavaScriptFinished += OnEvalJavaScriptFinished;//...void OnLoadComplete(UniWebView webView, bool success, string errorMessage) {  if (success)   {    webView.Show();  } else   {    Debug.LogError("Something wrong in web view loading: " + errorMessage);  }

设置webview的长宽高,这里都可以直接在ui上面显示浏览器

webView.insets = new UniWebViewEdgeInsets(5,5,5,5);

然后调用webView.Load()方法即可


Web页面和 Unity游戏逻辑的通信

1. UniWebView发送消息给 Unity
这个建议使用 url 方案。UniWebView 将监听 以 uniwebview://开始 的 url
如果玩家在 Web 页面点击了 Url 链接, UniWebView 将会解析为一个 UniWebViewMessage 对象 ,然后引发 OnReceivedMessage 事件。 一个 UniWebViewMessage 对象包含 一个路径字符串(其中有url 和args 参数字典)。
例如当点击了链接 : uniwebview://move?direction=up&distance=1
将被解析为:

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

你在 监听了 OnReceivedMessage 事件 的回调中, 会得到 UniWebViewMessage对象,然后实现自己的逻辑

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发送消息到 UniWebView
你可以运行任何的 javescript 页面, 通过使用 EvaluatingJavaScript 你能调用并运行Javascript, 这个JavaScript代码可以是你游戏脚本中的字符串形式。 你能监听 OnEvalJavaScriptFinished 事件, 来处理这个结果。


Android设置AndroidManifest.xml

在导入这个插件之前, 如果在您的项目中已经有一个AndroidManifest.xml 文件,你不应该从 UniWebView 包导入 AndroidManifest.xml 文件了(如果没有就直接全部导入就行了),而是您需要手动更新该文件。
1 在项目中的 Assets/Plugins/Android路径下 ,使用文本编辑器打开 AndroidManifest.xml文件
2 文件中 搜索 android.intent.action.MAIN(肯定有且只有一个),然后按照下面的步骤操作:
上面步骤2的搜索结果位于标记对之间,插入下面两行数据

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

3 在标记中,将 android: name的值更改为"com.onevcat.uniwebview.AndroidPlugin"。这将使用 UniWebView 的activity 来启动你的游戏。这样做,这样我们可以避免 web 视图在 安卓系统的一些问题

在安卓平台使用最大的问题是Unity失去焦点的问题。经过使用OnApplicationFocus方法测试,调用WebView打开界面时默认打开另一个Activity,Unity本身为一个Activity,当打开另外一个Activity时Unity会失去焦点,此时焦点不在Unity程序身上,如果锁屏或者按Home键再打开后只会调出最后一个显示的Activity,也就是UniWebView打开的网页,而不是Unity程序。也就是在打开网页的界面按下Home键或者锁屏后程序将无法正常返回。主要的问题在于Unity程序和打开的网页属于不同的Activity,解决的方法为更改Unity工程中的安卓配置文件,使一个Activity继承于另一个,显示在同一个Activity上。
如果你的MainActivity 使用的不是 com.unity3d.player.UnityPlayerNativeActivitycom.unity3d.player.UnityPlayerActivitycom.unity3d.player.UnityPlayerProxyActivity其中之一的话,您必须修改UniWebView源代码 修改到你的activity名字上

4 同样的在 标记中,添加 android: hardwareAccelerated ="true"android:windowSoftInputMode="adjustResize"。这将使安卓系统提供 html5功能
最终,会变成这样

<activity android: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-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />activity>

最后,添加访问互联网的权限, 如果有了就不用添加了。 在标记 之前 添加

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

其他

背景透明: 在 iOS 中,默认情况下web 视图还有一个灰色的背景 。你可以使用 SetTransparentBackground来设置为 背景透明

加载进度框: 就是表示加载进度,以改善体验。您可以禁用 和 显示,接口SetShowSpinnerWhenLoading;也可以自定义标签文本,接口SetSpinnerLabelText

Back 按键 和导航工具栏按钮支持: 用户可以使用后退按钮在 web 页面之间导航,Android 设备上像在本机浏览器中一样。iOS 是一个带有导航按钮的默认工具栏

向前 和 向后: 浏览器的两个行为,您可以在你的游戏中控制网页导航,通过 GoBackGoForward方法

清理缓存: web 视图将保持 url 请求,默认情况下,这可能会使旧的页面显示,即使您更新您的 web 页。使用 CleanCache来解决这一问题

视频播放: 在web 视图 播放视频,只需加载url

加载本地文件 和 html 字符串: 给定设置 本地文件的 url,或 调用 LoadHTMLString具有 html字符串的值,您可以加载本地的内容

不止一个 web 视图: 如果您希望在你的游戏中显示 多个 web 视图,那就是 有多个 挂有UniWebView组件的GameObject 而已

更多相关文章

  1. Android 数据绑定视图 dataBinding
  2. android 怎么实现启动页提前加载webView里的内容
  3. android listview 自动加载
  4. Android 加载服务器上的图片
  5. android加载效果,带百分比的
  6. GridView 加载并显示本地图片
  7. android Gide加载webp图片方法
  8. android中ListView的分页加载数据实现
  9. Android 加载富文本

随机推荐

  1. 在android中嵌入脚本语言综述
  2. Android平台Firefox――Fennec编译手记
  3. Android平台通用安全问题分析及策略
  4. [分享]android 人机界面指南(androdi设计
  5. Windows+eclipse与Android studio添加手
  6. 研究开源OpenWnn Android输入法源代码
  7. 4种Android屏幕自适应解决方案
  8. ReactNative Android 实现加载本地图片
  9. Android中一个webkit处理汉字编码的问题
  10. Android禁止横竖屏切换或禁止横竖屏切换