将字节数组从JavaScript返回到Emscripten / Unity Web程序集

问题描述 投票:1回答:1

我有一些要序列化的JavaScript数据,以便Unity可以将其作为byte []数组(如generally described here)使用。我想通过这样的jslib接口将该数据公开给Unity:

[DllImport("__Internal")]
private static extern byte[] GetByteArray();

[我试图使用emscripten中的内置方法来桥接JavaScript中的值:

  GetByteArray: function () {
    var myTypedArray = new Uint8Array([10, 20, 30, 40, 50]);
    var buf = _malloc(myTypedArray.length * myTypedArray.BYTES_PER_ELEMENT);
    writeArrayToMemory(myTypedArray, buf);
    return buf;
  },

[不幸的是,这不起作用-Webassembly C#只是将长度为0的数组视为返回类型。我还尝试了HEAPU8.set(myTypedArray, buf)之类的内容。

问题:

  1. 正确的方法是什么?
  2. 如果没有,至少从JavaScript到C的角度来看,我是否正确地做到了?问题更可能与C#表示字节数组有关吗?
c# unity3d emscripten webassembly
1个回答
0
投票

我希望您找到了解决问题的方法。这是我的(确实很hacky的解决方案),但是它可以工作:

jslib

GetByteArray: function(){
    var array = new Uint8Array([10, 20, 30, 40, 50]);
    var str = array.toString();
    str = '[' + str + ']';
    unityInstance.sendMessage('gameObject', 'ByteArrayAvailable', str);
}

C#

#if UNITY_WEBGL && !UNITY_EDITOR

[DllImport("__Internal")]
private static extern void GetByteArray();

#endif

...

void CallWebGL()
{
    GetByteArray();
}

void PdfAvailable(string byteArrayStr)
{
    var byteArray = JsonConvert.DeserializeObject<byte[]>(byteArrayStr);
}

您需要在您的plugins文件夹中添加Newtonsoft.Json.dll才能使它工作,但这是我发现使其工作的唯一简单方法:)

© www.soinside.com 2019 - 2024. All rights reserved.