2016-08-04 35 views
1

Ich bin in Unity mit C# Codierung und Entwicklung für WebGL. Ich muss Browser JavaScript verwenden, also habe ich eine .jslib geschrieben, von der ich Methoden in C# mit Marshalling aufrufen.Kann eine JavaScript-Callback-Methode mithilfe von Marshalling auf eine C# -Methode festgelegt werden?

Ist es möglich, dass ich einen JavaScript-Rückruf zu einer C# Aktion, Func, oder Event-Handler wie so einzustellen:

// 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(); 
    }; 
}, 

Ich habe jede dieser versucht, aber offenbar nicht zu tun es richtig. Ich weiß, dass C++ C# -Funktionen aufrufen kann, aber JavaScript muss irgendwie anders kommunizieren.

Versuche:

[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); 

Egal, was ich versuche, erhalte ich eine Typeerror besagt, dass das Objekt, das ich an der JavaScript vorbei über keine Funktion ist. Ich habe versucht:

  • Mit Aktion und Ereignis-Delegierten
  • Mit ref, IntPtr, und weder

Wer weiß, ob dies überhaupt möglich ist? Wie ich bereits sagte, habe ich zuvor erfolgreich eine C# -Methode in einer C++ - DLL aufgerufen, also dachte ich mir, dass es von einer .jslib aus möglich wäre.

+0

[Ist diese Antwort hilfreich?] (Http://stackoverflow.com/questions/35183253/unity3d-upload-a-image-from-pc-memory-to-webgl-app) – gman

Antwort

0

Aus meiner Erfahrung ist die einzige Möglichkeit, die beiden zu kommunizieren, von SendMessage. Wenn Sie mehrere Parameter übertragen müssen, können Sie ein Array anhängen.

+0

Danke für die Antwort! Ich wollte die GameObject.Find() - und Reflection-Aufrufe vermeiden. :(Am Ende habe ich einfach das Unity-Beispiel in Simple WebSockets für WebGL emuliert und einen Enumerator verwendet, der ständig nach neuen Nachrichten sucht. Das ist nicht das Schönste, aber es ist effizienter als eine Nachricht und funktioniert ganz gut. :) – sk84z