unity2020.1和2020.3虽然是小版本改动,但是webgl打包出来的Index.html内容改动很大,甚至在打包设置里分辨率的设置不一样也影响内容,这里用的是2020.3版本,参考的是这位大佬的文章:https://blog.csdn.net/gigiwotou/article/details/119870742使用这个模式的分辨率打包出来的代码才和网上别人贴出来的一样。
下面贴一下具体流程
在Unity Asset目录下新建一个Plugins文件夹,新建一个Txt文件,命名随意代码如下
mergeInto(LibraryManager.library, {
webMessage: function (eventName, arr){
window.ReportReady(Pointer_stringify(eventName), Pointer_stringify(arr))
}
});
这里的webMessage要和Unity里的代码相对应,并且写完后要把文件格式改为jslib,window.ReportReady定义的是打包出来的index.html 里向Vue发消息的函数
整体流程:Unity调用自身的webMessage方法 = unity和jslib通信,调用jslib里的webMessage方法,然后jslib就会和你打包出来的html通信,调用里面的 window.ReportReady方法,所以和vue通信的具体方法就要在index.html里的 window.ReportReady方法里具体写明。在你的Index.html里添加如下代码:
window.ReportReady = function(eventName,arr){
var initD = {
detail:{
arr}
var evt = new CustomEvent(eventName, initD)
window.top.dispatchEvent(evt)
console.log(eventName)
}
这段代码的作用就是接受unity发过来的消息并广播给Vue,vue接收代码如下:文章来源:https://www.toymoban.com/news/detail-441198.html
--src可以填相对路径也可使完整url链接
<iframe ref = "iframe" src="web/Unity.html" width="1920" height="1080" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen="true" frameborder="0"></iframe>
--调用发消息函数向unity发消息
this.$refs.iframe.contentWindow.message('Canvas', 'SetToken', ‘vue to unity’)
--监听unity发出的由window.ReportReady广播的事件,(unityEvent 由unity发送函数定义)
mounted () {
window.addEventListener('event1', this.uinityEvent, false)
}
这里的‘event1’就是你unity webMessage这个方法里传的事件名
这段代码里还有vue给unity 发消息的例子,正好解析一下,代码如下
message方法里传了三个参数分别是:unity 脚本所挂载的场景GameObject名字,unity 脚本里用来接收消息的方法名,具体传的消息。这里有个注意点就是,网上的代码这里基本上都是Canvas,说明别人unity代码就是挂在Canvas上的,我比较喜欢把测试代码挂在MainCamera上,所以照抄代码的时候这里一直报错,这边建议就和别人一样挂在Canvas上吧。再来看看这个message方法具体是怎么定义的,同样在index.html里定义,代码如下:文章来源地址https://www.toymoban.com/news/detail-441198.html
function message(gameObject, method, param) {
if (param === null) {
param = ''
}
if (this.gameInstance !== null) {
this.gameInstance.SendMessage(gameObject, method, param)
console.
到了这里,关于UnityWebGl2020.3与前端Vue通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!