1

我正在使用 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 中调用。

4

1 回答 1

0

根据我的经验,使两者通信的唯一方法是通过 SendMessage。如果需要携带多个参数,可以附加一个数组。

于 2016-08-05T00:33:31.500 回答