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个参数调用该函数?任何帮助将不胜感激。
答案 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)。