当前位置:   article > 正文

Unity webgl 嵌入Vue实现过程_webgl vue

webgl vue

需求分析:

Unity webgl嵌入到前端网页中,前端通过调用Unity webgl内方法实现需要展示的功能,前端点击Unity webgl内的交互点,Unity webgl返回给前端一些需要的数据。

例如:当我们需要在三维场景中展示库区中一些监控设备的部署位置,通过点击三维场景中的监控按钮打开当前监控设备的实时画面,一般情况下打开监控需要传递当前监控的IP或者通道号,这时Unity webgl向前端返回数据就用到了。

实现过程:

1、Unity webgl向Vue发送数据

首先,Unity webgl向前端发送数据需要定义一个.jslib格式文件作为转接,文件名自取(建议不要用中文)文件内容如下:

  1. mergeInto(LibraryManager.library, {
  2. UnitySendMessage: function (eventname, data)
  3. {
  4. window.ReportReady(UTF8ToString(eventname), UTF8ToString(data));
  5. } //如果多个方法需要使用逗号结尾(在此大括号后加逗号),只有一个方法不需要使用逗号
  6. });

到此,转接文件已经定义好了

接着在Unity脚本中添加 using System.Runtime.InteropServices; 引用(用于COM互操作),

代码如下:

  1. using System.Runtime.InteropServices;
  2. using UnityEngine;
  3. using UnityEngine.EventSystems;
  4. using UnityEngine.UI;
  5. public class Test: MonoBehaviour
  6. {
  7. [DllImport("__Internal")]
  8. private static extern void UnitySendMessage(string eventname, string data);//方法名及参数和转接的.jslib文件中的一样
  9. private Button button;
  10. private void Awake()
  11. {
  12. button.onClick.AddListener(SendMessage);
  13. }
  14. private void SendMessage()
  15. {
  16. UnitySendMessage("getbuttonname",GetButtonName());//事件名自己命名即可,前端在监听时使用
  17. }
  18. private string GetButtonName()
  19. {
  20. string name = EventSystem.current.currentSelectedGameObject.name;
  21. return name;
  22. }
  23. }

打包后打开index.html文件加入此段代码:

  1. window.ReportReady = function (eventname, data) {
  2. var initD = { detail: { data } }
  3. var evt = new CustomEvent(eventname, initD)
  4. window.top.dispatchEvent(evt)
  5. }

如图:

最后在Vue mounted中加入即可

window.addEventListener('getbuttonname', this.uinityEvent, false)//getbuttonname对应Unity内定义的事件名

2、Vue向Unity发送数据

首先,Vue调用Unity的方法就比较简单了,在Unity内定义带参数的方法如:

  1. using UnityEngine;
  2. public class Test: MonoBehaviour
  3. {
  4. private void GetVueData(string value)
  5. {
  6. Debug.Log(value);
  7. }
  8. }

接着打开打包后的index.html文件,在里面加入供前端调用的方法:

  1. function GetVueMessage(obj) {
  2. UnityInstanceV.SendMessage('MainSenceScript', 'GetVueData', JSON.stringify(obj))
  3. //对应的参数分别为:"Unity场景内挂载脚本的物体名字","方法名",最后一个参数复制粘贴即可
  4. }

最后只需Vue调用此方法并传递参数就可以了,如果这篇文章帮助到你,就点个赞吧!

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

闽ICP备14008679号