2016-09-19 4 views
0

J'essaie de faire fonctionner SCORM 1.2 avec notre projet Unity 5 WebGL. Je pensais introduire le code SCORM graduellement; Voici le code que je voudrais « traduire » il travaille dans l'unité:Conversion de SCORM.js pour travailler avec Unity 5

var vault = {};        //vault 'namespace' helps ensure no conflicts with possible other "SCORM" variables 
vault.UTILS = {};       //For holding UTILS functions 
vault.debug = { isActive: true };     //Enable (true) or disable (false) for debug mode 

vault.SCORM = {        //Define the SCORM object 
    version: null,        //Store SCORM version. 
    handleCompletionStatus: true,    //Whether or not the wrapper should automatically handle the initial completion status 
    handleExitMode: true,      //Whether or not the wrapper should automatically handle the exit mode 
    API:{handle: null, isFound: false},    //Create API child object 
    connection: { isActive: false },    //Create connection child object 
    data: { completionStatus: null, exitStatus: null}, //Create data child object 
    debug:{}          //Create debug child object 
}; 

Lorsque j'utilise ce code, tel qu'il est, on me dit que par l'unité 'Utils' is not a member of 'Boo.Lang.Hash'

OK. On m'a dit que je devrais utiliser Hashtables au lieu de simples oljavascript ojects. Alors, voici ce que j'ai jusqu'à présent:

var vault:Hashtable = new Hashtable();    //vault 'namespace' helps ensure no conflicts with possible other "SCORM" variables 
vault['UTILS'] = new Hashtable();     //For holding UTILS functions 
vault['debug'] = new Hashtable();     //Enable (true) or disable (false) for debug mode 
vault['debug']['isActive'] = true; 

vault['SCORM'] = {          //Define the SCORM object 
    version: null,        //Store SCORM version. 
    handleCompletionStatus: true,     //Whether or not the wrapper should automatically handle the initial completion status 
    handleExitMode: true,       //Whether or not the wrapper should automatically handle the exit mode 
    API:{handle: null, isFound: false},    //Create API child object 
    connection: { isActive: false },    //Create connection child object 
    data: { completionStatus: null, exitStatus: null}, //Create data child object 
    debug:{}          //Create debug child object 
}; 

Mais maintenant, l'unité jette l'erreur suivante:

Type 'Object' does not support slicing 

.... à la ligne vault['debug']['isActive'] = true;. Donc, comment ajouter une propriété à une Hashtable imbriquée dans une variable?

+0

"Javascript" de Unity n'est pas en fait du JavaScript; c'est en fait la compilation croisée à Boo, qui est ensuite exécutée sur .NET CLR modifié par Unity. Essayer de faire fonctionner SCORM dans Unity va être très, très dur. Il serait probablement plus facile d'exécuter séparément SCORM et Unity sur le navigateur, puis de les faire communiquer via des API. – rutter

+0

Cette page: https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html est très instructive mais j'obtiens une erreur 'EntryPointNotFoundException'. La recherche continue ... – moosefetcher

+0

Je ne travaille pas avec Unity, mais je vais prendre un moment pour vous rappeler que la bibliothèque n'est pas nommée SCORM.js, c'est le Piperks SCORM Wrapper, qui a été renommé par quelqu'un dans votre entreprise. https://github.com/pipwerks/scorm-api-wrapper – pipwerks

Répondre

1

Je fini par suivre les conseils de cette page:

https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html

Il suggère de charger vos fichiers .js externes comme normale dans le fichier html contenant (Vous devez configurer un modèle html WebGL personnalisé pour faire) et vous pouvez appeler ces fonctions .js de C#, en utilisant:

Application.ExternalCall("functionName", "parameter"); 

vous pouvez également appeler des fonctions C# dans les composants de script de GameObjects, à partir du fichier .js externe, avec:

SendMessage (GameObjectName, 'functionName', 'parameter'); 

Alors, je l'ai encapsule tout l'interaction SCORM directe dans le fichier SCORM.js - il fait tous les LMSSetValue ('cmi.objectives .... et LMSGetValue ("cmi.core.lesson_status .. met à jour et gère les objectifs qui ont déjà été atteints. L'unité indique à SCORM quels objectifs elle doit initialiser. Tout fonctionne bien.

Trié!

+0

L'interface JavaScript de Yeah Unity ne ressemblait pas à Flash, donc vous vous êtes principalement limité à simplement envoyer le message et à repasser un autre appel dans l'unité pour obtenir le résultat. Cela fait un an ou plus que je l'ai regardé, mais la plupart des exemples de base se terminent automatiquement ou font l'approche "j'étais là" de SCORM. – Mark