IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> [Unity] UniWebView的使用 -> 正文阅读

[游戏开发][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是打不开的
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:53:21  更:2022-03-16 22:53:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 17:58:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码