2016-09-20 5 views
0

Ich versuche, ein Unity 5 WebGL-Projekt in SCORM 1.2 integriert zu bekommen. Dies beinhaltet das Unity-WebGL-Build, das mit etwas externem Javascript kommuniziert.Unity 5 WebGL: Kommunikation mit externem JavaScript von C#

fand ich diese Seite:
https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
..., die die externen js in einer Assets/Plugins/WebGL-Ordner und die Datei als .jslib Datei schlägt platzieren. Hier ist, wie meine temporäre SCORM.jslib Datei aussieht:

var SCORM = { 
    Hello: function() 
    { 
     window.alert("Hello, world!"); 
     console.log("Hello function in SCORM.jslib has been called."); 
    } 
} 

Dann wird in einem C# Skript an meinem Gameobject Trigger (ein Würfel):

using UnityEngine; 
using System.Collections; 
using System.Runtime.InteropServices; 

public class CompletionTrigger : MonoBehaviour {  

    [DllImport("__Internal")] 
    private static extern void Hello(); 

    void Start() { 

     Hello(); 

    }  

    void Update() { 

    } 
} 

Das Problem ist, ich bin immer ein ‚EntryPointNotFoundException 'Fehler in der Zeile, wo' Hallo() 'aufgerufen wird.

Ich habe gegoogelt und hier gesucht, aber die Antworten scheinen sich auf die Entwicklung von C++ - DLLs oder RoR beziehen.

Weiß jemand, was diesen Fehler verursacht? Danke.

EDIT
sah ich einen Kommentar auf einer anderen Seite, dass der Fehler im Editor nur gesagt erschien so dass ich dachte, dass ich wieder einen WebGL Build laufen würde. Ich erhalte den folgenden Fehler:

Failed running "C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport/BuildTools/Emscripten_Win/python/2.7.5.3_64bit/python.exe" "C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport/BuildTools/Emscripten/emcc" @"D:/Projects/Unity 3D/Packaging Test/Assets/../Temp/emcc_arguments.resp" 
stdout: 
WARNING: sanity check failed to run [Errno 13] Permission denied: 'C:\\Program Files\\Unity\\Editor\\Data\\PlaybackEngines\\WebGLSupport/BuildTools/emscripten.config_sanity' 
stderr: 
WARNING root: did not see a source tree above or next to the LLVM root directory (guessing based on directory of C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport/BuildTools/Emscripten_FastComp_Win\llc), could not verify version numbers match 
INFO  root: (Emscripten: Running sanity checks) 
WARNING root: java does not seem to exist, required for closure compiler, which is optional (define JAVA in ~/.emscripten if you want it) 
error: failure to execute js library "D:\Projects\Unity 3D\Packaging Test\Assets\Plugins\WebGL\SCORM.jslib": ReferenceError: window is not defined,,ReferenceError: window is not defined 

Die Fehlermeldung für eine Weile weiter, aber die letzte Zeile ich hier aufgenommen haben scheint, den Compiler zu deuten darauf hin, weiß nicht, was mit ‚Fenstern‘ zu tun, ist es nicht sagen, definiert. Dort wird auch eine "Vernunftprüfung" erwähnt, die ziemlich passend scheint.

Noch einmal, wenn jemand irgendwelche Zeiger hat, würde es sehr geschätzt werden.

Antwort

1

Falls jemand das gleiche Problem hat, habe ich dieses Problem ausweichen verwaltet:

verwenden ich die erste Option auf Unity-Handbuch Seite statt, so dass nun meine SCORM.js Datei in den Index geladen wird. HTML-WebGL-Vorlage.

(Um eine benutzerdefinierte WebGL-Vorlage zu erstellen, erstellen Sie einen 'WebGLTemplates'-Ordner in Ihrem Assets-Ordner. Alle Ordner in Assets/Templates, die index.html-Dateien enthalten, sind als Vorlagen im Bearbeiten> Projekteinstellungen> Player-Inspektor verfügbar) .

So haben hinzugefügt ...

<script src="js/SCORM.js"></script> 

... auf meine index.html und setzen SCORM.js in einem Ordner 'js' genannt - neben dem endgültigen Build Datei index.html I können nun SCORM.js Funktionen von C#, wie folgt aufrufen:

Application.ExternalCall("initialiseSCORM", "This could specify an id"); 

Der nächste Schritt von SCORM.js bekommen SCORM Informationen werden, aber wie die Seite vorgeschlagen, sollte ich nutzen können:

SendMessage ('MyGameObject', 'MyFunction', 'foobar'); 

... in SCORM.js, um Informationen in das Unity-Spiel zu übertragen.