2016-09-20 2 views
0

J'essaie d'intégrer un projet Unity 5 WebGL à SCORM 1.2. Cela implique que la version Unity WebGL communique avec un javascript externe.Unity 5 WebGL: Communiquer avec le javascript externe de C#

Je trouve cette page:
https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
... qui suggère de placer les js externes dans un dossier actif/Plugins/WebGL et enregistrez le fichier en tant que fichier .jslib. Voici comment mon fichier SCORM.jslib temporaire ressemble:

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

Puis, dans un script C# attaché à mon déclencheur gameobject (un cube):

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() { 

    } 
} 

Le problème est que je reçois un « EntryPointNotFoundException 'erreur sur la ligne où' Hello() 'est appelé.

J'ai recherché et recherché sur googled ici, mais les réponses semblent se rapporter au développement de dll C++ ou RoR.

Est-ce que quelqu'un sait ce qui cause cette erreur? Merci.

EDIT
J'ai vu un commentaire sur une autre page qui dit que l'erreur est apparue dans l'éditeur, donc je pensais que je courrais une version WebGL à nouveau. Je reçois l'erreur suivante:

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 

Le message d'erreur se poursuit pendant un certain temps, mais la dernière ligne que j'ai inclus ici semble suggérer que le compilateur ne sait pas quoi faire avec « fenêtre », en disant ce n'est pas défini. Il y a aussi une mention d'un «contrôle de santé mentale» là-bas, qui semble tout à fait approprié.

Encore une fois, si quelqu'un a des pointeurs, ce serait très apprécié.

Répondre

1

Dans le cas où quelqu'un a le même problème, j'ai réussi à esquiver cette question:

J'ai utilisé la première option sur cette unité Manuel à la place, maintenant mon fichier SCORM.js est chargé dans l'index. Modèle WebGL html. Pour créer un modèle WebGL personnalisé, créez un dossier "WebGLTemplates" dans votre dossier Assets.Tous les dossiers des assets/templates contenant des fichiers index.html seront disponibles en tant que modèles dans le panneau Edit> Project Settings> Player inspector) .

Ainsi, après avoir ajouté ...

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

... à mon index.html et de mettre SCORM.js dans un dossier appelé 'js' - à côté du fichier index.html construction finale, je peut maintenant appeler des fonctions SCORM.js de C#, comme ceci:

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

La prochaine étape sera d'obtenir des informations SCORM de SCORM.js, mais comme cette page a suggéré, je devrais pouvoir utiliser:

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

... dans SCORM.js pour transmettre des informations dans le jeu Unity.