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 update
    void 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 update
    void 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 frame
    void 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)

继续!!

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中,要使用android.permission.READ_LOGS权限,需要根据不同的Unity版本和Bugly Unity Plugin版本进行相应的配置。根据引用[1]中的Android SDK使用指南,可以修改导出的Android工程的AndroidManifest.xml文件,将android.permission.READ_LOGS权限添加到权限声明中。具体步骤如下: 1. 打开Unity项目工程。 2. 导入最新版本的Bugly Unity Plugin。根据引用中的通用部分集成步骤,下载并导入Bugly Unity Plugin的相关文件到您的Unity工程中。 3. 打开导出的Android工程的AndroidManifest.xml文件。这个文件位于Unity项目工程的Assets/Plugins/Android目录下。 4. 在AndroidManifest.xml文件中的权限声明部分,添加如下权限: <uses-permission android:name="android.permission.READ_LOGS" /> 通过以上步骤,您就可以将android.permission.READ_LOGS权限添加到Unity项目的AndroidManifest.xml文件中,以实现读取logcat日志的功能。请注意,根据具体的Bugly Unity Plugin版本和Unity版本,可能还需要执行其他配置和集成步骤,具体可以参考Bugly Unity Plugin的官方文档或相关资源。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Bugly Unity Plugin](https://blog.csdn.net/qq_39816832/article/details/80238872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [unity--关于自动添加READ_PHONE_STATE权限](https://blog.csdn.net/lalate/article/details/84340644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值