unity 浏览器插件【embedded browser(原zfbrowser)】简单教程,使unity支持web h5页面,附软件下载链接

news2025/3/14 3:08:51

一 简介

这是个在项目中使用了很久的浏览器插件。
很负责任的说这是在pc平台上最好用的浏览器插件
商业付费价格78刀,相比3d webview等插件动不动就178、368的价格就显得很良心
最新版下载链接(请勿商用)

1.1 功能概述

基本和普通浏览器无异

  1. 支持调试台Devtools功能
  2. 支持evil js
  3. 支持h5 原生视频播放
  4. 支持控制台捕获
  5. 支持unity to js, js to unity通信
  6. 支持鼠标键盘事件
  7. 支持各种浏览器操作,包括前进后退刷新打印复制剪切粘贴等
  8. 支持多窗口
  9. 支持vr输入
    还有很多功能等你慢慢发现
1.2 安装

与其他unity插件相同,下载解压后双击即可完成安装。安装完成后project窗口会多出个ZFbrowser文件夹。demo目录下有测试场景。
在这里插入图片描述

二 使用教程

2.1 准备工作
  1. 在场景中添加ui canvas 和 RawImage物体
    在这里插入图片描述
  2. 在RawImage物体中添加以下组件,这几个组件分别是:浏览器主题组件Browser,虚拟鼠标交互组件 Pointer UIGUI,箭头显示组件 Cursor Renderer OS
    在这里插入图片描述
    3 再新建个c#脚本BrowserMessager 作为组件放到该物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;

[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{
    private Browser browser;

    void Start()
    {
    	// 获取当前物体上的Browser组件
        browser = GetComponent<Browser>();
    }
}
2.2 加载外部网址
  1. 在刚才新建的脚本中添加加载外部网址方法“browser.LoadURL()”
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;

[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{
    private Browser browser;

    void Start()
    {
        browser = GetComponent<Browser>();
        // 跳转到百度首页
		browser.LoadURL("www.baidu.com",true);
    }
}

直接运行即可看到百度首页

2.2 直接运行html代码

调用“browser.LoadHTML()”方法

browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>这是个html代码</title><p>html内容</p></body></html>");
2.3 加载unity本地html文件

加载本地文件有三个情况:

  1. 加载unity工程里的网页资源
  2. 加载assetbundle打包的网页资源
  3. 加载本地硬盘的网页资源
2.3.1 加载unity工程里的网页资源

1 首先在Assets平级目录中建立BrowserAssets文件夹。注意是平级,不是下级!
在这里插入图片描述
2 将创建好的html页面和其他资源扔进去
在这里插入图片描述
3 在browser组件的url 设置中改为 localGame://demo/1.html
localGame会自动定位到BrowserAssets目录。 demo是我建的文件夹。1.html就是要运行的网页

注意:
如果网页里面有同文件夹的资源调用别忘了去掉"/"。 例如下面代码,如果是外部网页资源应该加上斜杠, 。如果是本地资源就应该去掉斜杠

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <img id = "img" src="图.png" alt=""> 
</body>
</html>
2.3.2 加载assetbundle打包的网页资源
2.3.3 加载本地硬盘的网页资源

加载本地硬盘的网页资源还用我说了吗,要么起个服务直接给网址,要么使用system.io找到文件地址

三 unty与html通信

网页js与unity通信,至少需要分别实现html和c#两个脚本

3.1 通信:HTML => UNITY

html代码可以按上文所述放置在本地或服务器上。c#脚本作为组件添加到某物体上

html代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
	// 创建一个按钮,绑定方法"jsevent"
    <button type="button" onclick="jsevent()">点击按钮通信给unity</button>  
    <script type="text/javascript">
        function jsevent() {
				 console.log("传参");
		}
    </script>
</body>
</html>
c#代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;
using ZenFulcrum.EmbeddedBrowser.VR;

[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{
    private Browser browser;
    void Start()
    {
        browser = GetComponent<Browser>();
        //监听html 中的jsevent方法
        browser.RegisterFunction("jsevent", (JSONNode jv) =>
        {
        	// js多参数输入
            Debug.Log(jv[0].Value);
        });
    }
}

点击通信按钮
在这里插入图片描述
unity这边就捕获到了信息
在这里插入图片描述
捕获信息也可以在html那边直接用console.log打印出来,然后在c#中调用

browser.onConsoleMessage += (string s1, string s2) => {
    Debug.Log("js console info:" + s1 + s2);
};

直接捕获控制台数据。不过为了区分数据需要添加数据组合规则较麻烦。

3.2 UNITY => HTML

js代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
    	//被unity调用的函数
		function unityevent(item) {
			console.log("unity参数:",item);
		}
    </script>
</body>
</html>

c#代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;
using ZenFulcrum.EmbeddedBrowser.VR;

[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{
    private Browser browser;
    void Start()
    {
        browser = GetComponent<Browser>();
    }
    private void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            browser.CallFunction("unityevent", "unity to js").Done();
        }
    }
}

执行程序号,按下space按键,即可看到js代码中unityevent所打印的参数了
在这里插入图片描述

四 其他api

直接执行js代码
browser.EvalJS("console.warning(\"this is jscode\")");
监听浏览器控制台输出
browser.onConsoleMessage += (string s1, string s2) => {
    Debug.Log(s1 + "====" + s2);
};
直接跳转到网址
browser.LoadURL("www.baidu.com",true);
直接执行html代码
browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>123123</title><p>html代码</p></body></html>");
网页完成加载时触发的事件
        browser.onLoad += (JSONNode jn) => {
            Debug.Log("浏览器完成加载");
        };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1103919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】

scrapyd部署爬虫 Scrapyd 是一个基于 Scrapy 的开源项目&#xff0c;它提供了一个简单的方式来部署、运行和监控 Scrapy 爬虫。它是一个用于集成 Scrapy 爬虫到分布式架构中的工具&#xff0c;允许您在分布式环境中运行爬虫&#xff0c;并提供了一组 Web API&#xff0c;用于管…

软考高级系统架构设计师系列之:数学与经济管理

软考高级系统架构设计师系列之:数学与经济管理 一、数学与经济管理二、图论应用-最小生成树三、图论应用-最短路径四、图论应用-网络与最大流量五、运筹方法-线性规划六、运筹方法-动态规划七、运筹方法-转移矩阵八、运筹方法-排队论九、运筹方法-决策-不确定决策十、运筹方法…

携手北大医学部、哈佛BCH顶尖平台,飞鹤全面启动脑发育战略

10月17日&#xff0c;“专研大脑营养 聪明中国宝宝”飞鹤脑发育战略发布会在北京举办。会上&#xff0c;中国飞鹤宣布启动脑发育战略。诺奖得主迈克尔莱维特、中国工程院院士朱蓓薇、中国工程院院士陈卫、北京大学神经科学研究所副所长邢国刚等海内外专家齐聚&#xff0c;共同探…

Redis数据结构之listpack

前言 当数据量较小时&#xff0c;Redis 会优先考虑用 ziplist 来存储 hash、list、zset&#xff0c;这么做可以有效的节省内存空间&#xff0c;因为 ziplist 是一块连续的内存空间&#xff0c;它采用一种紧凑的方式来存储元素。但是它也有缺点&#xff0c;比如查找的时间复杂度…

Unity2023, Unity2022, Unity2021的性能对比(帧率)

最近由于需要用到Unity最新版的一些功能&#xff0c;比如Spline&#xff0c;比如Foward渲染&#xff0c;新项目用了Unity2022.3.5版本&#xff0c;但是出包之后&#xff0c;感觉帧率很低。本着好奇的态度&#xff0c;专门写了一个测试场景&#xff0c;分别在Unity2023.1.15&…

激光跟踪仪在风电行业中的应用

随着全球能源行业重点从化石能源向可再生能源转移&#xff0c;风电行业逐渐成为我国能源供应体系的重要分支&#xff0c;相关的风电检测设备需求量急剧增加。 风电设备主要特点是“重、大”&#xff0c;在过去&#xff0c;主要使用大型卡尺、两点式仪表、专用模板等量具对重要尺…

PS运行中缺失d3dcompiler_47.dll问题的5个有效修复方法总结

在使用ps作图的时候&#xff0c;我们有时会遇到一些问题&#xff0c;其中之一就是“PS运行中缺失d3dcompiler_47.dll”的问题。这个问题可能会导致PS无法正常运行&#xff0c;“d3dcompiler_47.dll”。这是一个动态链接库文件&#xff0c;它是DirectX的一部分&#xff0c;主要负…

Docker仓库harbor私服搭建

Harbor和Registry都是Docker的镜像仓库&#xff0c;但是Harbor作为更多企业的选择&#xff0c;是因为相比较于Regisrty来说&#xff0c;它具有很多的优势。 提供分层传输机制&#xff0c;优化网络传输 Docker镜像是是分层的&#xff0c;而如果每次传输都使用全量文件(所以用FT…

Kubernetes 基础

Kubernetes是什么 K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c; 后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会…

Lock锁的使用方法(一)

public class LockTest01 {private Lock lock new ReentrantLock();public static void main(String[] args) throws InterruptedException {/*** Lock锁 获取锁和释放锁 需要开发人员自己定义*/LockTest01 lockTest01 new LockTest01();lockTest01.print();Thread.sleep(500…

C++基础入门详解(二)

文章目录 引用语法和使用场景基本语法使用场景引用作函数参数引用作返回值常引用 权限问题权限的放大、平移、缩小类型转化时使用的 const 引用的底层逻辑 内联函数内联函数缺点 引用 C中的引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器…

海量小文件数据传输如何确保安全性

在当今的信息化社会&#xff0c;企业需要处理和传输的文件越来越多&#xff0c;越来越大。其中&#xff0c;海量小文件数据是一种特殊的数据类型&#xff0c;它由数亿级别的小文件&#xff08;通常小于1MB&#xff09;组成&#xff0c;它在图片网站、物联网设备、日志分析等场景…

尚硅谷Flink(完)FlinkSQL

&#x1f9d9;FlinkSQL&#x1f3c2;&#x1f93a; Table API 和 SQL 是最上层的 API&#xff0c;在 Flink 中这两种 API 被集成在一起&#xff0c;SQL 执行的对象也是Flink 中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。 SQL API 是基于…

C#的数据集:DataSet对象

目录 一、合并DataSet内容 1.源码 2.生成效果 二、 复制DataSet内容 1.源码 2.生成效果 DataSet对象就像存放于内存中的一个小型数据库。它可以包含数据表、数据列、数据行、视图、约束以及关系。通常&#xff0c;DataSet的数据来源于数据库或者XML&#xff0c;为了从数…

智慧文旅推动“互联网+”深入发展、促进数字经济加速增长

1997年之后&#xff0c;科技开始成为旅游行业发展的重要生产要素和重要动力。 文旅1.0时代&#xff0c;科技所能提供的信息和服务基本都需要游客在旅游开始之前做大量的准备工作&#xff0c;而在旅游过程中却无法随机应变&#xff0c;对于旅游景点来说&#xff0c;也只是更换了…

如何在C程序中使用libcurl库下载网页内容

概述 爬虫是一种自动获取网页内容的程序&#xff0c;它可以用于数据采集、信息分析、网站监测等多种场景。在C语言中&#xff0c;有一个非常强大和灵活的库可以用于实现爬虫功能&#xff0c;那就是libcurl。libcurl是一个支持多种协议和平台的网络传输库&#xff0c;它提供了一…

在.Net 5或更高版本的.Net中使用appsettings.json配置文件

在.Net 5或更高版本的.Net中使用appsettings.json配置文件 对于 .NET Framework 应用程序&#xff0c;我们始终使用app.config来存储应用程序的配置值。 在.NET Core或者.Net 5包括其他更高版本的.Net框架中&#xff0c;我们需要使用appsettings.json文件&#xff0c;而不是A…

餐饮业的现状能拉动消费市场吗?

有关“餐饮店倒闭成趋势”话题的讨论在互联网上愈加热烈起来&#xff0c;足以说明“全民消费&#xff0c;拉动经济”的希望尚未变成现实。从笔者寄居养老的风水宝地——国家AAAA级旅游景区崇州市街子古镇的餐饮店&#xff0c;在今年中秋、国庆双节假日期间火了几天后生意又复归…

计算机毕业设计 基于Spring Boot智能停车计费系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

C++之基于Winsock2封装UDPServer与UDPClient

文章目录 Socket过程UDPServer.hUDPServer.cppUDPClient.hUDPClient.cppmain.cppCMakeLists.txt测试截图 Socket过程 UDPServer UDPClient UDPServer.h #ifndef UDPSERVER_H_INCLUDED #define UDPSERVER_H_INCLUDED#include <iostream> #include <string> #inclu…