Unity2023.1.19_Embedded Browser-ZFBrowser插件

Unity2023.1.19_Embedded Browser-ZFBrowser插件

官方说明文档可以仔细看一下:

ZFBrowser Documentation (zenfulcrum.com)

ZFBrowser插件的简单直接使用:

导入插件包资源,遵循常规导包原则即可;

抓取包文件夹下的预制体组件放入场景可以快速开始使用插件;

以Browser(GUI)为例,预制体上会挂载以下的几个重点组件和脚本,分别是:

Raw Image组件,浏览器组件Browser,虚拟鼠标交互组件 Pointer UIGUI,箭头光标显示组件 Cursor Renderer OS;

 Browser变量:

自行添加对象并通过代码去打开一个网页:

using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{private Browser browser;// Start is called before the first frame updatevoid Start(){browser = GetComponent<Browser>();//url打开一个网页browser.LoadURL("www.baidu.com",true);//打个一个html代码网页//browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>这是个html代码</title><p>开始一个html内容</p></body></html>");        }
}

输入框无法输入中文:

按下图方法修改PointerUIGUI的OnSelect函数,即可解决无法中文输入的问题;

Unity与JS互通信:

Unity组件中BrowserUrl指向前端Html代码;

运行控制显示如下:

C#代码中通过browser.RegisterFunction()注册函数,browser.CallFunction调用前端函数

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using ZenFulcrum.EmbeddedBrowser;[RequireComponent(typeof(Browser))]
public class BrowserMessager : MonoBehaviour
{private Browser browser;// Start is called before the first frame updatevoid Start(){browser = GetComponent<Browser>();//网页完成加载时触发的事件browser.onLoad += (JSONNode jn) => {Debug.Log("浏览器完成加载");};//url打开一个网页//browser.LoadURL("https://www.baidu.com/", true);//打个一个html代码网页//browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>这是个html代码</title><p>开始一个html内容</p></body></html>");//browser.RegisterFunction("jsevent", args =>//{//     Args is an array of arguments passed to the function.//    args[n] is a JSONNode. When you use it, it will implicitly cast to the type at hand.//    Note that if, say, args[0] was a string instead of an integer we'd get default(int) above.//    See JSONNode.cs for more information.//    //int xPos = args[0];//    //int yPos = args[1];//      // js多参数输入//    Debug.Log(args.IsValid);//    Debug.Log((int)args[0]);//    Debug.Log(args[0]);//});//browser.RegisterFunction("testAgain", (JSONNode jk) =>//{//    Debug.Log(jk[0].Value);//});browser.RegisterFunction("jsevent", (JSONNode jv) =>{//Debug.Log(jv[0].Value); // 报错 InvalidJSONNodeException: Exception of type 'ZenFulcrum.EmbeddedBrowser.InvalidJSONNodeException' was thrown.Debug.Log((int)jv[0]);});browser.RegisterFunction("confirmClicked", args =>{            Debug.Log("Button clicked: " + args[0] + " val: " + (int)args[1]);});}// Update is called once per framevoid Update(){    if (Input.GetKey(KeyCode.Space)){browser.CallFunction("unityevent", "Unity调用js函数-unity to js").Done();           }}   }

html代码中包含一个按钮和绑定调用点击事件(函数调用unity的jsevent,参数前端调用指定),一个unity调用的函数(参数Unity调用指定);

<!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"  style="font-size: 30px;" onclick="jsevent()">点击按钮通信给unity</button><br><button style="font-size: 30px;" onclick="confirmClicked('button3', 13)">Confirm Things</button><!-- <script type="text/javascript">function jsevent() {console.log("传参,测试完成!!");           }function testAgain(){}</script> --><script type="text/javascript">//被unity调用的函数function unityevent(item) {console.log("unity参数:" + item);}</script></body>
</html>

 InvalidJSONNodeException是什么原因(至今不明)?

InvalidJSONNodeException: Exception of type 'ZenFulcrum.EmbeddedBrowser.InvalidJSONNodeException' was thrown.
ZenFulcrum.EmbeddedBrowser.JSONNode.Check () (at Assets/ZFBrowser/Scripts/JSONNode.cs:117)
ZenFulcrum.EmbeddedBrowser.JSONNode.get_Value () (at Assets/ZFBrowser/Scripts/JSONNode.cs:240)
BrowserMessager+<>c.<Start>b__1_1 (ZenFulcrum.EmbeddedBrowser.JSONNode jv) (at Assets/Scripts/BrowserMessager.cs:55)
ZenFulcrum.EmbeddedBrowser.Browser+<>c__DisplayClass155_0.<RegisterFunction>b__0 (ZenFulcrum.EmbeddedBrowser.JSONNode value, System.Boolean error) (at Assets/ZFBrowser/Scripts/Browser.cs:1062)
ZenFulcrum.EmbeddedBrowser.Browser+<>c__DisplayClass173_0.<CB_ForwardJSCallFunc>b__0 () (at Assets/ZFBrowser/Scripts/BrowserCallbacks.cs:64)
UnityEngine.Debug:LogException(Exception)
ZenFulcrum.EmbeddedBrowser.<>c__DisplayClass173_0:<CB_ForwardJSCallFunc>b__0() (at Assets/ZFBrowser/Scripts/BrowserCallbacks.cs:67)
ZenFulcrum.EmbeddedBrowser.Browser:ProcessCallbacks() (at Assets/ZFBrowser/Scripts/Browser.cs:1081)
ZenFulcrum.EmbeddedBrowser.Browser:LateUpdate() (at Assets/ZFBrowser/Scripts/Browser.cs:1116)

继续!!

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

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

相关文章

【Docker】安装及相关的命令

目录 一 Docker简介 1.1 是什么 1.2 优缺点 1.3 应用场景 1.4 安装 二 命令 2.1 Docker基本命令 2.2 Docker镜像命令 2.3 Docker容器命令 一 Docker简介 1.1 是什么 Docker是一个开源的应用容器引擎&#xff0c;它基于Go语言实现&#xff0c;并利用操作系统本身已有的…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下&#xff0c;POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

禁止safari浏览器网页双击缩放功能

普通浏览器 普通浏览器&#xff0c;只需要增加meta标签禁止缩放功能就行了 <meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0;" name"viewport" /> user-scalableno或0 //禁止双指缩放页面initial-scale1.0…

【Java设计模式】四、适配器模式

文章目录 1、适配器模式2、举例 1、适配器模式 适配器模式Adapter Pattern&#xff0c;是做为两个不兼容的接口之间的桥梁目的是将一个类的接口转换成客户希望的另外一个接口适配器模式可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 最后&#xff0c;适配器…

CSS3技巧37:JS+CSS3 制作旋转图片墙

开学了就好忙啊&#xff0c;Three.js 学习的进度很慢。。。 备课备课才是王道。 更一篇 JS CSS3 的内容&#xff0c;做一个图片墙。 其核心要点是把图片摆成这个样子&#xff1a; 看上去这个布局很复杂&#xff0c;其实很简单。其思路是&#xff1a; 所有图片放在一个 div.…

人工智能之Tensorflow程序结构

TensorFlow作为分布式机器学习平台&#xff0c;主要架构如下&#xff1a; 网络层&#xff1a;远程过程调用(gRPC)和远程直接数据存取(RDMA)作为网络层&#xff0c;主要负责传递神经网络算法参数。 设备层&#xff1a;CPU、GPU等设备&#xff0c;主要负责神经网络算法中具体的运…

【数据结构】OJ面试题《设计循环队列》(题库+代码)

1.前言 本题需要结构体和数组的知识&#xff0c;记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队…

UE5 C++ 单播 多播代理 动态多播代理

一. 代理机制&#xff0c;代理也叫做委托&#xff0c;其作用就是提供一种消息机制。 发送方 &#xff0c;接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。 创建一个C Actor作为练习 二.单播代理 创建一个C Actor MyDeligateActor作为练习 在MyDeligateAc…

Tuning Language Models by Proxy

1、写作动机&#xff1a; 调整大语言模型已经变得越来越耗资源&#xff0c;或者在模型权重是私有的情况下是不可能的。作者引入了代理微调&#xff0c;这是一种轻量级的解码时算法&#xff0c;它在黑盒 大语言模型 之上运行&#xff0c;以达到直接微调模型的结果&#xff0c;但…

Java项目:29 基于SpringBoot+thymeleaf实现的图书管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于SpringBootthymeleaf实现的图书管理系统分为管理员、读者两个登录角色&#xff0c;一共是8个功能模块 管理员权限 图书管理&#xff1a; 添加图…

便携式森林消防灭火泵:森林安全的守护者

在自然环境中&#xff0c;森林是地球生态系统的重要组成部分&#xff0c;它们为我们提供氧气、净化空气、防止土壤侵蚀等重要功能。然而&#xff0c;当森林发生火灾时&#xff0c;它们也会成为我们的噩梦。火势蔓延迅速&#xff0c;难以控制&#xff0c;对森林和生态环境造成严…

java高级——反射

目录 反射概述反射的使用获取class对象的三种方式反射获取类的构造器1. 获取类中所有的构造器2. 获取单个构造器 反射获取构造器的作用反射获取成员变量反射变量赋值、取值获取类的成员方法反射对象类方法执行 反射简易框架案例案例需求实现步骤代码如下 反射概述 什么是反射 反…

SpringCloud微服务-Eureka注册中心

Eureka注册中心 文章目录 Eureka注册中心前言1、Eureka的作用2、搭建EurekaServer3、服务注册4、启动多个实例5、服务拉取 -实现负载均衡 前言 在服务调用时产生的问题&#xff1a; //2. 利用RestTemplate发起HTTP请求&#xff0c;查询user String url "http://localho…

FinalShell控制远程Linux服务器(首先得自己已购买好Linux服务器并安装了对应的系统,这里是安装的centos系统)

1、电脑上需要安装FinalShell软件 可以到分享的链接中下载软件&#xff0c;然后双击点击下一步安装即可 链接&#xff1a;https://share.weiyun.com/Y6TrdDHp 密码&#xff1a;gbvyg62、建立远程连接 3、输入连接信息 4、显示连接主机成功&#xff0c;表示远程进入 5、输入…

代码随想录算法训练营第42天|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

文章目录 1049.最后一块石头的重量II思路&#xff1a;动归五部曲代码&#xff1a; ● 494. 目标和思路五部曲1.确定dp数组五部曲2.确定dp公式3.dp初始化4.遍历顺序 代码&#xff1a; ● 474.一和零思路动归五部曲 代码&#xff1a; 1049.最后一块石头的重量II 思路&#xff1a;…

Excel数据表定制分组排序

实例需求&#xff1a;某学校体育活动统计表如下图左侧表格所示&#xff0c;数据按照班级排列&#xff0c;现在需要根据如下规格对表格进行排序 “幼儿”班级排列在表格最后按照“次数”降序排列“幼儿”班级同样按“次数”降序排列 排序结果如下图中右侧表格所示。 示例代码…

将法律条文很美观的复制到word上

前言 目前很多法律条款都没有现成的PDF或者word格式的供大家下载&#xff0c;这个时候呢&#xff0c;领导又要求你帮他搞定&#xff0c;这就很。。。。 步骤 复制全部条款到word中使用wps的排版功能&#xff0c;将空格和空段落全部移除 3. 设置好你需要的格式 标题&#xff…

express+mysql+vue,从零搭建一个商城管理系统3--user路由模块

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建routes文件夹二、新建routes/index.js和routes/user.js三、修改index.js四、修改routes/index.js五、修改routes/user.js六、启动项目预览总结 前言 需求&#xff1a;主要学习express&#xff0c;所…

VR转接器:破解虚拟与现实边界的革命性设备

VR转接器&#xff0c;这一革命性的设备&#xff0c;为虚拟现实体验带来了前所未有的自由度。它巧妙地连接了虚拟与现实&#xff0c;使得用户在享受VR眼镜带来的奇幻世界的同时&#xff0c;也能自由地在现实世界中活动。这一设计的诞生&#xff0c;不仅解决了VR眼镜续航的瓶颈问…

在Arcgis中删除过滤Openstreetmap道路属性表中指定highway类型道路

一、导出道路类型并分析 1. 导出道路类型 选中highway属性列&#xff0c;选择汇总→确定 2. 分析 用Excel打开输出表&#xff0c;包含的道路类型如下 0.空值’’ 车辆可行驶道路&#xff08;和bfmap的并集&#xff09; 空值&#xff08;无定义道路&#xff09; 二、…