Unity WebGL多线程WebWorker

1.新建一个test.jslib文件,放在Plugins文件夹下,内容如下:

mergeInto(LibraryManager.library, {                 
    CaculateInfo:function(str1,str2)
    {
        window.alert(Pointer_stringify(str1));
        CaculateUnityInfo(Pointer_stringify(str1),Pointer_stringify(str2));
    },
});

2.Unity中新建一个WebGLMsgSend.cs,挂在场景中。添加一个Text,收到WebWorker数据后显示出来

打包后Unity,会调用Jslib中CaculateInfo方法,传两个参数。jslib又去调网页html中的CaculateUntiyInfo方法。

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class WebGLMsgSend : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void CaculateInfo(string msg, string guid);

    public Text msgText;

    void Start()
    {
        CaculateInfo("MM",Guid.NewGuid().ToString());
    }

    public void GetWebMsg(string value)
    {
        string[] m = value.Split('|');
        if(m!=null&&m.Length>1)
        {
            msgText.text += string.Format("Value:{0}  Guid:{1}", m[0], m[1]);
        }
        else
        {
            msgText.text+= string.Format("Value:{0}",value);
        }
        
    }


}

3.将WebGL工程打包后,用notpad打开打包后的html文件。

Unity WebGL多线程WebWorker_第1张图片

Unity WebGL多线程WebWorker_第2张图片

4.添加上图中WebWorker部分.传输数据给webWorker,webWorker处理完数据后,把处理完的数据发送给unity。

webWorker.cs放在webGL打包后index.html同级目录。 webWorker.js内容:

var obj = 
{     
    mValue : "savePreferences",
    mGuid:"123"
}
postMessage(JSON.stringify(obj));
addEventListener
(
    "message",function (e) 
    {     
        for (var i = 0; i < 10000000000; i++) 
        {
            if (i % 100000 === 0) 
            {
                obj.mValue = e.data.mValue;
                obj.mGuid="jjj-dddd-"+i;
                postMessage(JSON.stringify(obj));
            }
        }
    }
)

5.运行网页后,会先提示Unity传过来的。之后unity场景打开,text中会显示webworker传给Unity的数据。(由于webworker循环次数太多,unity会提示内存溢出)

Todo:由于unity跟html之间的调用,需要用到序列化和反序列化,并不像thread那样可以直接调用。而我们工程处理,需要用到很多类,太麻烦了。所以先暂停对这个的使用。

后续再需用到时,需要再测试类转string发给webworker,处理完成后,再发给Unity。

Unity WebGL多线程WebWorker_第3张图片

Unity WebGL多线程WebWorker_第4张图片 

上图是webWorker发给unity的数据 

 

 

 

 

 

 

你可能感兴趣的:(UntiyWebgl通信)