是否可以使用编组将JavaScript回调方法设置为C#方法?
问题描述:
我使用C#编写Unity,并为WebGL开发。我需要使用浏览器JavaScript,所以编写了一个.jslib,我使用编组方法在C#中调用方法。是否可以使用编组将JavaScript回调方法设置为C#方法?
是否有可能对我来说,一个JavaScript回调设置为C#操作,FUNC键或事件处理程序,像这样:
// 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);
无论我怎么努力,我得到一个类型错误,说明我正在穿越到JavaScript中的对象不是一个函数。我已经试过:
- 使用动作和事件委托
- 使用参考,IntPtr的,也不
任何人都知道,如果这甚至有可能?就像我说过的,我之前成功地在C++ .dll中调用了C#方法,所以想通过.jslib可以这样做。
答
根据我的经验,使这两者进行通信的唯一方法是通过SendMessage。如果你需要携带多个参数,你可以附加一个数组。
+0
感谢您的回复!我想避免GameObject.Find()和Reflection调用。 :(我最终只是在Simple WebSockets中为WebGL模拟了Unity的例子,并使用了一个不断检查新消息的Enumerator,不是最漂亮的,但它比发送消息更有效,工作得很好。 – sk84z
[这个答案有帮助吗?](http://stackoverflow.com/questions/35183253/unity3d-upload-a-image-from-pc-memory-to-webgl-app) – gman