vue与unity交互(不需要任何第三方插件)

vue与unity交互最终版本 不需要安装任何第三方插件

之前我使用的vue-unity-webgl 后来发现插件不丰满 容易出现各种问题

问题1:unity为了解决无法输入中文问题,使用了网上的解决方案,导致vue页面input也无法输入
问题2:unity引入hls,为了解决视频播放问题,因为vue-unity-webgl不支持引入其他js,导致unity无法正常播放视频(我还傻呵呵的改了三方源码,打了补丁,现在血亏)

综合以上2个原因,我决定从根本上解决此问题,也为了避免不再背锅,想出了以下解决方案

在vue中依然使用iframe引入unity文件,原因:iframe是另外一个window,即使unity为了解决input无法输入中文的问题,也不会影响到我vue,大爷的

然后在unity打包后的index.html中 输入以下代码(贴图1),然后vue中使用以下代码(贴图2),即可解决此问题。既不用背锅,也可以正常的进行交互。

tip:不用担心iframe层级无限高导致布局困难的问题,新版unity即使在iframe中引入,也是可以被定位元素覆盖住的
vue与unity交互(不需要任何第三方插件)_第1张图片
vue与unity交互(不需要任何第三方插件)_第2张图片

vue与unity交互(不需要任何第三方插件)_第3张图片

这里监听的fn是我和untiy定义的交互文档 这种交互一定存在文档
vue与unity交互(不需要任何第三方插件)_第4张图片
总结:
window.ReportReady 是自定义事件,是由unity挂载到window的,当unity需要给vue发送事件的时候,会调用window.ReportReady(),然后带有2个参数,一个是事件名字,一个是携带参数,这个示例中,携带事件名字为fn;
前端接受到后,通过dispatch来派发到顶层window,顶层window就是咱们的vue,然后vue中通过事件监听来获取;
发送事件的话就是通过send,通过contentWindow来调用iframe中(unity打包后的index.html)的方法,方法为固定api写法,其中贴图中有注释

你可能感兴趣的:(vue,unity)