我正在使用 C# 在 Unity 中进行编码并为 WebGL 进行开发。我需要使用浏览器 JavaScript,因此编写了一个 .jslib,我使用 Marshalling 调用 C# 中的方法。
我是否可以将 JavaScript 回调设置为 C# Action、Func 或 Event Handler,如下所示:
// Javascript in .jslib called from C# using static extern
// action being the C# method that I want to call
// On callback I get -> TypeError: action is not a function
SetOnOpen: function (action) {
$jsobj.onopen = function () {
action();
};
},
我已经尝试了每一个,但似乎没有正确地做到这一点。我知道 C++ 可以调用 C# 函数,但是 JavaScript 必须以不同的方式进行通信。
尝试:
[DllImport("__Internal")]
private static extern void SetOnOpen(ref OnOpenHandler handler);
[DllImport("__Internal")]
private static extern void SetOnOpen(ref Action action);
[DllImport("__Internal")]
private static extern void SetOnOpen(IntPtr handler);
无论我尝试什么,我都会收到一个 TypeError 说明我传递给 JavaScript 的对象不是函数。我试过了:
- 使用动作和事件委托
- 使用 ref、IntPtr 和两者都不使用
任何人都知道这是否可能?就像我说的,我之前在 C++ .dll 中成功调用了 C# 方法,因此认为可以从 .jslib 中调用。