SendMessage с параметром массива в единстве webgl
Unity SendMessage может передавать только один параметр, и это может быть массив. Поэтому я вызываю мой sendMessage для JavaScript и вызываю метод C# (точнее, метод webgl)
var arr = [x,y,z];
gameInstance.SendMessage("Cube","SetGameObjectPosition",arr);
но получаю эту ошибку
Вызывает обработчик ошибок из-за
Uncaught 2,2,2 не имеет типа, который поддерживается SendMessage. [Нарушение] Обработчик 'click' занял 8994ms blob: http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2 Uncaught 2,2,2 is не имеет типа, который поддерживается SendMessage.
SendMessage @ blob: http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2
SendMessage @ UnityLoader.js: 4
SetObjectPosition @ (index): 44
onclick @ (индекс):65 (индекс): 65
[Нарушение] обработчик 'click' занял 9000ms
2 ответа
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;
или что-то типа того
Вы можете передать строку 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);
}