【Unity】UniWebView的使用

一、介绍
  1. 背景:
    需要直接在游戏内展示一个webview视窗
  2. UniWebView(版本3.0+)

    UniWebView 是一个 Unity 3D 插件,用于将 Web 视图组件添加到 iOS 和 Android 上的 Unity 3D 手机游戏。它在 C# 中提供了一组抽象、跨平台和高级 API。使用 UniWebView,您可以在不了解原生开发的情况下将一些行为(例如浏览器)放入您的游戏中。
    当您需要显示公告或通知、为玩家排名添加排行榜或向您的用户显示任何交互式网页时,它会极大地促进您的开发过程。
    官网地址
    UniWebView 4.7
    提取码:2jhf
    UniWebView 3.0+
    提取码:gd0w

二、使用

1.使用方法相对简单,直接上代码

 public class UniWebPresenter :UIPresenterBase
    {
        [SerializeField] private RectTransform m_UniWebRectTransform;			//UniWebViewNativeListener物体的父物体
        private UniWebView m_UniWebView;
		private string m_Url;
		private bool m_Log;
        public override void Init(params object[] parameters)
        {
			m_Url = parameters[0] as string;
			if(string.IsNullOrEmpty(m_Url))
            {
				Destroy(gameObject);
            }
			m_Log = GameSetting.Instance.Log; 
			CreateUniWebView();
			OnLoaded();
		}
		public void CreateUniWebView()
		{
			m_UniWebView = m_UniWebRectTransform.gameObject.AddComponent<UniWebView>();
			m_UniWebView.ReferenceRectTransform = m_UniWebRectTransform;
			m_UniWebView.OnMessageReceived += OnMessageReceived;
			m_UniWebView.OnPageStarted += OnPageStarted;
			m_UniWebView.OnPageFinished += OnPageFinished;
			m_UniWebView.OnKeyCodeReceived += OnKeyCodeReceived;
			m_UniWebView.OnPageErrorReceived += OnPageErrorReceived;

			m_UniWebView.OnShouldClose += OnShouldClose;

			m_UniWebView.SetBackButtonEnabled(true);// 回退钮  物理按键
			m_UniWebView.SetAllowFileAccessFromFileURLs(true);//访问本地的权限

			m_UniWebView.SetShowSpinnerWhileLoading(true);//过程中是否显示加载指示器。

			//uniWebView.SetSpinnerText("Loading");//设置显示在加载指示器中的文本

			m_UniWebView.SetHorizontalScrollBarEnabled(false);// 设置是否在Web内容超出Web视图范围时显示水平滚动条。
			m_UniWebView.SetVerticalScrollBarEnabled(false);// 设置当Web内容超出Web视图范围时,是否应显示垂直滚动条。

			m_UniWebView.BackgroundColor = Color.white;//背景
		}
		/// <summary>
		/// 加载页面
		/// </summary>
		/// <param name="url"></param>
		public void OnLoaded()
        {
			m_UniWebView.Load(m_Url);
			m_UniWebView.Show();
        }
        /// <summary>
        /// 重新加载页面
        /// </summary>
        private void OnReLoaded()
		{
			if (m_UniWebView.isActiveAndEnabled)
			{
				m_UniWebView.Reload();
			}
		}
		/// <summary>
		/// 关闭页面
		/// </summary>
		private void OnClose()
		{
			m_UniWebView.Hide();
            Destroy(gameObject);
        }

		/// <summary>
		/// 开始加载web视图触发
		/// </summary>
		/// <param name="webView"></param>
		/// <param name="url"></param>
		private void OnPageStarted(UniWebView webView, string url)
		{
			if(m_Log)
				Debug.Log("[UbiWebPresenter]  OnPageStarted " + url);
		}

		/// <summary>
		/// 加载web视图成功触发
		/// </summary>
		/// <param name="webView"></param>
		/// <param name="statusCode"></param>
		/// <param name="url"></param>
		private void OnPageFinished(UniWebView webView, int statusCode, string url)
		{
			if (m_Log)
				Debug.Log("[UbiWebPresenter]  OnPageFinished statusCode:" + string.Format("statusCode:{0},url{1}", statusCode, url));
		}

		/// <summary>
		/// 页面加载过程中引发错误
		/// </summary>
		/// <param name="webView"></param>
		/// <param name="errorCode"></param>
		/// <param name="errorMessage"></param>
		private void OnPageErrorReceived(UniWebView webView, int errorCode, string errorMessage)
		{
			if (errorCode == -2)
			{
				OnClose();
			}
			if (m_Log)
				Debug.Log("[UbiWebPresenter]  OnPageErrorReceived :" + string.Format("errorCode:{0},errorMessage{1}", errorCode, errorMessage));
		}
		/// <summary>
		/// 设备按键触发
		/// </summary>
		/// <param name="webView"></param>
		/// <param name="keyCode"></param>
		private void OnKeyCodeReceived(UniWebView webView, int keyCode)
		{
			if (keyCode == 4)
			{
				OnClose();
			}
			if (m_Log)
				Debug.Log("[UbiWebPresenter]  OnKeyCodeReceived keycode:" + keyCode);
		}
		

		/// <summary>
		/// JS调用Unity时触发
		/// </summary>
		/// <param name="webView"></param>
		/// <param name="message"></param>
		private void OnMessageReceived(UniWebView webView, UniWebViewMessage message)
		{
			if (m_Log)
				Debug.Log("[UbiWebPresenter]  OnMessageReceived :" + message.RawMessage);
		}
		/// <summary>
		/// 视图自动关闭时触发
		/// </summary>
		/// <param name="webView"></param>
		/// <returns></returns>
		private bool OnShouldClose(UniWebView webView)
		{
            webView.CleanCache();//清除缓存
			webView = null;
			return true;
		}

	}

在这里插入图片描述

三、坑
  1. url必须加协议前缀 http://、https://之类,否则网页打开一片空白
  2. 注意:UniWebView只支持Android、iOS和Mac平台,Windows是打不开的
UniWebView是用于移动Unity3D游戏的现代Web视图组件。将网页内容集成到游戏中从未如此简单。什么是UniWebView UniWebView是一个Unity 3D插件,用于将Web视图组件添加到Unity 3D手机游戏中。UniWebView在C#中包含一组抽象的高级API,它们包装了iOS和Android平台的本机API。借助UniWebView,您可以在不了解本机开发的情况下将某些行为(例如浏览器)插入游戏。当您需要显示公告或通知,为玩家排名添加排行榜或仅向用户显示任何网页时,此功能非常有用。 #支持的平台 UniWebView支持运行: iOS 9.0或以上 Android 5.0(API级别21)或更高版本 在iOS上,UniWebView WKWebView用作渲染组件。在Android WebView使用UniWebView还包含macOS上的Unity Editor支持,用于调试目的。如果要在Mac上开发游戏,则可以直接在Unity Editor的播放模式下打开独立的Web视图。如果您在Windows PC上工作,则仍可以在移动设备上构建和使用UniWebView,但是无法在Windows Unity编辑器中直接查看结果。 该编辑器插件是功能齐全的各种移动版本。尽管UniWebView是为移动平台设计的,但如果需要,您也可以将其放入独立的macOS游戏中。 #版本3 UniWebView项目始于2013年。UniWebView的原始版本支持Unity4。在Unity 5中,Unity团队更改了本机插件工作方式的方法,并且无法在同一插件版本中同时支持Unity 4和5。因此,我们决定对版本2进行重大升级。经过几年的开发,UniWebView 2现在非常稳定。但是,遗留代码仅UIWebView在iOS上支持旧样式(并且已弃用),并且我们还必须考虑向后兼容性,并且也必须使用过时的API WebView。 我们对这种情况不满意。如果我们使用最新技术,则性能和代码质量可能会大大提高。添加功能和解决问题也将更加容易和快捷。这就是我们决定从头开始重写UniWebView的原因。在版本3中,我们再次从0开始,并重新设计了几乎所有API。凭借过去几年的发展经验,我们有机会使美好的事物变得更好,而糟糕的设计也就消失了。 已经在使用UniWebView 2?请查看第3版的重点内容,以了解它是如何从以前的版本演变而来的。请注意,版本3与版本2不兼容。如果要从UniWebView 2升级,则不妨对迁移指南进行简要介绍。大多数概念是相似的,但可能仍需要一段时间才能升级。我们还建议您阅读我们的文档,以将UniWebView的潜在功能带到您的项目中。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值