2016-08-04 70 views
1

我使用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可以这样做。

+0

[这个答案有帮助吗?](http://stackoverflow.com/questions/35183253/unity3d-upload-a-image-from-pc-memory-to-webgl-app) – gman

回答

0

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

+0

感谢您的回复!我想避免GameObject.Find()和Reflection调用。 :(我最终只是在Simple WebSockets中为WebGL模拟了Unity的例子,并使用了一个不断检查新消息的Enumerator,不是最漂亮的,但它比发送消息更有效,工作得很好。 – sk84z

相关问题