Unity 5.6 - 从WebGL SendMessage调用Unity函数时出错

时间:2017-04-27 10:03:56

标签: javascript c# unity3d unity-webgl

SendMessage电话:

gameInstance.SendMessage("MessageReceiver", "Test", "This is a message", "myname");

错误讯息:

  

无法调用MessageReceiver类的函数Test

     

使用1个参数调用函数Test但该函数需要2。

     

(文件名:行:810)

功能定义:

public void Test(string message, string name) {
    // If the call from JavaScript succeeds, an alert will show up on the page
    Application.ExternalEval("alert('it works')");
}

第一个参数“MessageReceiver”是脚本附加到的统一游戏对象。

第二个,“Test”,是被调用函数的名称。

其余的参数传递给被调用的函数,在我的例子中是“Test”。

正如您所看到的,我传递了2个字符串参数,这正是“测试”所接收的。为什么然后是一个错误告诉我,我正在使用1个参数调用该函数?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

SendMessage函数只接受1个参数,如果要发送多个参数,该参数应该是一个数组。因此,只需使用您的值&#34创建一个临时的object []数组;这是一条消息"和" myname"并将此对象[]传递给sendMessage函数。

object[] args = new object[2];
args[0] = "This is a message";
args[1] = "myname";
gameInstance.SendMessage("MessageReceiver", "Test", args);

答案 1 :(得分:0)

您不能使用当前版本的Unity(v2018.4.8f1)或任何以前的版本执行此操作。

您可以检查gameInstance.sendMessage的作用:

它实际上只是调用gameInstance.Module.SendMessage

function ƒ() {
  if (a.Module.SendMessage)
    return a.Module.SendMessage.apply(a.Module, arguments)
}

忽略多个参数:

function SendMessage(gameObject, func, param) {
  if (param === undefined) Module.ccall("SendMessage", null, ["string", "string"], [gameObject, func]);
  else if (typeof param === "string") Module.ccall("SendMessageString", null, ["string", "string", "string"], [gameObject, func, param]);
  else if (typeof param === "number") Module.ccall("SendMessageFloat", null, ["string", "string", "number"], [gameObject, func, param]);
  else throw "" + param + " is does not have a type which is supported by SendMessage."
}

通常,Unity WebGl2开发人员确实在C#端使用多种方法。但是,在某些情况下,无法在C#端使用多种方法,因此它们会坚持使用字符串作为多个参数(因为JS中仅支持数字和字符串)。

您可以将多个参数从C#发送到JS。

您只能将 一个参数从JS发送到C#。

在两种情况下,您都只能发送字符串或数字(int,float,double)。