UnityスクリプトからJavaScriptの関数を呼び出す

記事内に広告が含まれています。

今回はUnityのC#スクリプトからJavaScriptの関数を呼び出してみます。

なぜそれが必要になるかというと、ブラウザーのJavaScriptエンジンやAPIを使って何らかの操作をしたい時があるからです。

例えば、Application.persistentDataPathに保存したファイルが永続化されない場合に、JavaScriptを使ってIndexDBへの書き込み処理(非同期処理なのでいつ終わるかわからない為)をフラッシュして書き込む時等です。

スポンサーリンク

JavaScriptのライブラリファイルを作成する

まずはJavaScriptの関数のライブラリファイルを作成します。

パソコンのデスクトップ等にテキストファイルを作成し、拡張子をjslibにします。

今回はTest.jslibファイルを作成し、以下のような処理を書きます。

MyTestFunctionという名前の関数とSyncFileという名前の関数を作成しています。

MyTestFunction関数はTestという文字列をアラートで表示します。

SyncFile関数はApplication.persistentDataPathに保存したファイルが永続化されない時等のファイルの読み書きをした後に呼び出して書き込み操作をフラッシュする為の処理です。

この処理に関してはこの記事の最後に記載の参考サイトを参照してください。

Unityのエディターに実行したいJavaScript関数を書いたライブラリファイルを置く場所を作成します。

AssetsフォルダにPluginsフォルダを作成します。

ここに先ほどデスクトップに作成したTest.jslibライブラリファイルをドラッグ&ドロップして置きます。

プラグインファイルの置き場所

Test.jslibファイルを選択し、インスペクタでWebGLにチェックが入っていることを確認します。

JavaScriptのプラグイン

今回の場合はWebGLから実行するプラグインなのでWebGLのみにチェックを入れます。

Editorにチェックを入れてもUnityエディター上で確認出来ないので、確認する時はWebGL形式で出力し実行します。

JavaScriptを呼び出すUnityのC#スクリプトを作成する

JavaScriptのライブラリファイルが出来たので次はUnityのC#スクリプトからライブラリの関数を実行してみます。

新しくUseJavaScriptLibスクリプトを作成しヒエラルキーのMainCamera等に取り付けます。

DLLImportで内部プラグイン(__Internal)を指定します。

その下に実行したいJavaScriptのライブラリの関数を指定します。

後はその関数を実行したい場所で呼び出します(今回はStartメソッドで呼び出しています)。

今回は引数を使っていませんが、JavaScriptの関数で引数を使っていれば引数を渡すことも出来ます。

実行

後はWebGL形式でビルドし、実行するだけです(Build And Runで実行)。

ブラウザが開くと以下のようにアラートが表示されます。

Testという文字列がアラートに表示された

またF12キーを押して開発ツールを開くと、ブラウザのコンソールでFS.syncfsでエラーが発生したのを確認出来ます。

FS.syncfsでエラー

スクリプトエラーで実行出来ない!?

スクリプトが正常に書かれているのにエラーが発生する場合は作成した.jslib内のスクリプトを書きなおしたり、ファイルを選択しインスペクタのSelect platforms for pluginのチェックを確認し、Applyボタンを押した後にUnityを再起動すると実行出来る場合もあります。

Unityを再起動するのは、一度スクリプトからプラグインがロードされるとアンロードされないみたいだからです。

終わりに

WebGL形式でPlayerPrefsでデータを保存する機能を使う時に今回の機能が使えそうです。

自作のタイピングゲームのデータ保存機能作る時に使えるかな・・・・

FinalTyping
Unityを使って作成したローマ字入力のタイピングゲームです。

参考サイト

WebGL: ブラウザースクリプトとの相互作用

WebGL ビルドのデバッグとトラブルシューティング

Unity Answers-データの保存、WebGL-

タイトルとURLをコピーしました