统一webgl中带有数组参数的SendMessage

时间:2019-02-12 05:21:27

标签: unity3d unity-webgl

Unity SendMessage只能传递一个参数,它可以是一个数组。所以我在用JavaScript调用sendMessage并调用C#方法(实际上是webgl方法)

var arr = [x,y,z];
gameInstance.SendMessage("Cube","SetGameObjectPosition",arr);

但收到此错误

  

由于以下原因调用错误处理程序

     

未捕获的2,2,2不具有以下类型支持的类型   发信息。 [违反]“点击”处理程序花费了8994ms   blob:http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2未捕获   2,2,2没有SendMessage支持的类型。

     

SendMessage @   blob:http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2

     

SendMessage @ UnityLoader.js:4

     

SetObjectPosition @(索引):44

     

onclick @(索引):65(索引):65

     

[违反]“点击”处理程序花了9000ms

2 个答案:

答案 0 :(得分:2)

您可以传递json字符串:

var pos = {x:1,y:2,z:3};
gameInstance.SendMessage("Cube","SetGameObjectPosition", JSON.stringify(pos));

团结一致:

void SetGameObjectPosition(string data)
{
    var position = JsonUtility.FromJson<Vector3>(data);
}

答案 1 :(得分:1)

SendMessage Docu

  

SendMessage(objectName, methodName, value);

     

objectName是场景中对象的名称; methodName是脚本中当前附加到该对象的方法的名称; value可以是字符串,数字或为空。

->不,它不能是数组


但是似乎您想传递一个头寸,以便作为一种变通方法,可以传递诸如“ 2,2,2”之类的字符串并使用

string[] numberStrings = ("2,2,2").Split(",");
float x = float.TryParse(numberStrings[0], out x) ? x : 0;
float y = float.TryParse(numberStrings[1], out y) ? y : 0;
float z = float.TryParse(numberStrings[2], out z) ? z : 0;

或类似的东西