当前位置:   article > 正文

Unity2023.1.19_Embedded Browser-ZFBrowser插件

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变量:

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

  1. using UnityEngine;
  2. using ZenFulcrum.EmbeddedBrowser;
  3. [RequireComponent(typeof(Browser))]
  4. public class BrowserMessager : MonoBehaviour
  5. {
  6. private Browser browser;
  7. // Start is called before the first frame update
  8. void Start()
  9. {
  10. browser = GetComponent<Browser>();
  11. //url打开一个网页
  12. browser.LoadURL("www.baidu.com",true);
  13. //打个一个html代码网页
  14. //browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>这是个html代码</title><p>开始一个html内容</p></body></html>");
  15. }
  16. }

输入框无法输入中文:

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

Unity与JS互通信:

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

运行控制显示如下:

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

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using ZenFulcrum.EmbeddedBrowser;
  6. [RequireComponent(typeof(Browser))]
  7. public class BrowserMessager : MonoBehaviour
  8. {
  9. private Browser browser;
  10. // Start is called before the first frame update
  11. void Start()
  12. {
  13. browser = GetComponent<Browser>();
  14. //网页完成加载时触发的事件
  15. browser.onLoad += (JSONNode jn) => {
  16. Debug.Log("浏览器完成加载");
  17. };
  18. //url打开一个网页
  19. //browser.LoadURL("https://www.baidu.com/", true);
  20. //打个一个html代码网页
  21. //browser.LoadHTML("<html><head><style>p{color: red;}</style></head><body><title>这是个html代码</title><p>开始一个html内容</p></body></html>");
  22. //browser.RegisterFunction("jsevent", args =>
  23. //{
  24. // Args is an array of arguments passed to the function.
  25. // args[n] is a JSONNode. When you use it, it will implicitly cast to the type at hand.
  26. // Note that if, say, args[0] was a string instead of an integer we'd get default(int) above.
  27. // See JSONNode.cs for more information.
  28. // //int xPos = args[0];
  29. // //int yPos = args[1];
  30. // // js多参数输入
  31. // Debug.Log(args.IsValid);
  32. // Debug.Log((int)args[0]);
  33. // Debug.Log(args[0]);
  34. //});
  35. //browser.RegisterFunction("testAgain", (JSONNode jk) =>
  36. //{
  37. // Debug.Log(jk[0].Value);
  38. //});
  39. browser.RegisterFunction("jsevent", (JSONNode jv) =>
  40. {
  41. //Debug.Log(jv[0].Value); // 报错 InvalidJSONNodeException: Exception of type 'ZenFulcrum.EmbeddedBrowser.InvalidJSONNodeException' was thrown.
  42. Debug.Log((int)jv[0]);
  43. });
  44. browser.RegisterFunction("confirmClicked", args =>
  45. {
  46. Debug.Log("Button clicked: " + args[0] + " val: " + (int)args[1]);
  47. });
  48. }
  49. // Update is called once per frame
  50. void Update()
  51. {
  52. if (Input.GetKey(KeyCode.Space))
  53. {
  54. browser.CallFunction("unityevent", "Unity调用js函数-unity to js").Done();
  55. }
  56. }
  57. }

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <!-- 创建一个按钮,绑定方法"jsevent" -->
  10. <button type="button" style="font-size: 30px;" onclick="jsevent()">点击按钮通信给unity</button>
  11. <br>
  12. <button style="font-size: 30px;" onclick="confirmClicked('button3', 13)">Confirm Things</button>
  13. <!-- <script type="text/javascript">
  14. function jsevent()
  15. {
  16. console.log("传参,测试完成!!");
  17. }
  18. function testAgain()
  19. {
  20. }
  21. </script> -->
  22. <script type="text/javascript">
  23. //被unity调用的函数
  24. function unityevent(item)
  25. {
  26. console.log("unity参数:" + item);
  27. }
  28. </script>
  29. </body>
  30. </html>

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

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

继续!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/159151
推荐阅读
  

闽ICP备14008679号