2016-08-04 72 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

相關問題