这是个在项目中使用了很久的浏览器插件。
很负责任的说这是在pc平台上最好用的浏览器插件
商业付费价格78刀,相比3d webview等插件动不动就178、368的价格就显得很良心
最新版下载链接(请勿商用)
基本和普通浏览器无异
与其他unity插件相同,下载解压后双击即可完成安装。安装完成后project窗口会多出个ZFbrowser文件夹。demo目录下有测试场景。
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>();
}
}
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);
}
}
直接运行即可看到百度首页
调用“browser.LoadHTML()”方法
browser.LoadHTML("这是个html代码 html内容
");
加载本地文件有三个情况:
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>
加载本地硬盘的网页资源还用我说了吗,要么起个服务直接给网址,要么使用system.io找到文件地址
网页js与unity通信,至少需要分别实现html和c#两个脚本
html代码可以按上文所述放置在本地或服务器上。c#脚本作为组件添加到某物体上
<!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>
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);
};
直接捕获控制台数据。不过为了区分数据需要添加数据组合规则较麻烦。
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所打印的参数了
browser.EvalJS("console.warning(\"this is jscode\")");
browser.onConsoleMessage += (string s1, string s2) => {
Debug.Log(s1 + "====" + s2);
};
browser.LoadURL("www.baidu.com",true);
browser.LoadHTML("123123 html代码
");
browser.onLoad += (JSONNode jn) => {
Debug.Log("浏览器完成加载");
};