2016-08-04 5 views
1

私はUnityでC#を使ってコーディングしてWebGLを開発しています。私はブラウザのJavaScriptを使用する必要がありますので、マーシャリングを使用してC#でメソッドを呼び出す.jslibを記述してください。マーシャリングを使用してJavaScriptコールバックメソッドをC#メソッドに設定することはできますか?

// 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#のアクションへのFunc、またはイベント・ハンドラをJavaScriptのコールバックを設定するため

は可能ですそれは適切です。私は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にオーバー渡しているオブジェクトが関数ではないことを示す例外TypeErrorを取得していません。私が試した:

  • は、参考文献、のIntPtrを使用してアクションとイベントデリゲート
  • を使用して、これはことも可能である場合もない

誰もが知っていますか?私が言ったように、以前はC++の.dllでC#メソッドを呼び出していたので、.jslibからC#のメソッドを呼び出すことは可能でした。

+0

[この回答は役に立ちましたか?](http://stackoverflow.com/questions/35183253/unity3d-upload-a-image-from-pc-memory-to-webgl-app) – gman

答えて

0

私の経験から、2つの通信を行う唯一の方法はSendMessageです。複数のパラメータを持ち越す必要がある場合は、配列をアタッチすることができます。

+0

返信ありがとうございます!私はGameObject.Find()とReflection呼び出しを避けたかったのです。 :(私はWebGLのSimple WebSocketsでUnityの例をエミュレートし、新しいメッセージを絶えずチェックする列挙子を使用してしまいましたが、それほどきれいではありませんが、メッセージを送信してより効果的です。 – sk84z

関連する問題