我有一些要序列化的JavaScript数据,以便Unity可以将其作为字节[]数组(如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)
之类的东西。
问题:
答案 0 :(得分: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才能使它工作,但这是我发现使其工作的唯一简单方法:)