2016-09-19 6 views
0

私はUnity 5 WebGLプロジェクトでSCORM 1.2を動作させようとしています。SCORM.jsをUnity 5で動作させるために変換する

私は徐々にSCORMコードを導入すると思いました。

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 
}; 

私はそのコードを使用

、そのまま、私はUnityが 'Utils' is not a member of 'Boo.Lang.Hash'

OKと言われています:ここで私はそれがユニティで動作するように、「翻訳」したいコードです。私は、私はハッシュテーブルを使ってはいけないと言われました。だからここに私がこれまで持っているものです:

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 
}; 

をしかし、今Unityは、次のエラーがスローされます。

Type 'Object' does not support slicing 

.... vault['debug']['isActive'] = true;ラインで。

So - 変数にネストされたHashtableにプロパティを追加するにはどうすればよいですか?

+0

ユニティの「JavaScript」は実際にはJavaScriptではありません。それは実際にUnityの修正された.NET CLR上で実行されるBooへのクロスコンパイルです。 SCORMをUnityで動かそうとすることは非常に難しくなります。ブラウザ上でSCORMとUnityを別々に実行し、APIを介して通信する方が簡単かもしれません。 – rutter

+0

このページ:https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html非常に有益ですが、私は 'EntryPointNotFoundException'エラーが発生しています。研究は続きます... – moosefetcher

+0

私はUnityで動作しませんが、ライブラリがSCORM.jsという名前ではなく、あなたの会社の誰かによって名前が変更されたPipwerks SCORM Wrapperです。 https://github.com/pipwerks/scorm-api-wrapper – pipwerks

答えて

1

私はこのページのアドバイス、次の終わった:それは(あなたがこれを行うには、カスタムのWebGL HTMLテンプレートを設定する必要が含むHTMLファイルに通常どおり外部の.jsファイルをロード示唆

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

)、その後、あなたが使用して、C#のからこれらの.js関数を呼び出すことができます。

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

をあなたもして、外部の.jsファイルから、ゲームオブジェクトのスクリプトコンポーネントでC#の関数を呼び出すことができます。

だから、
SendMessage (GameObjectName, 'functionName', 'parameter'); 

、私はSCORM.jsファイルに直接SCORM相互作用のすべてをカプセル化してきました - それは、すべてのLMSSetValue( 'cmi.objectives ....と結果、LMSGetValue(「cmi.core.lesson_statusになります。..以前に完了した目標を更新および管理します。 UnityはSCORMにどの目標を初期化するかを伝えるだけです。すべてうまく動作します。

ソート済み!

+0

ええUnityのJavaScriptインターフェイスはFlashと似ていなかったので、あなたは主にメッセージを送信し、結果を得るために別のコールを再び統一化する必要がありました。私はそれを調べてから1年以上経ちましたが、ほとんどの基本的な例は自動で完了するか、SCORMへの「私はここにいました」アプローチを行います。 – Mark

関連する問題