Unity C# スクリプトから JavaScript 関数を呼び出す
Call functions from your JavaScript plug-in or browser in your Unity project.
読み終わるまでの所要時間 9 分最終更新 1ヶ月前
JavaScript プラグインの関数を Unity C# コードで使用できます。ウェブページの他の要素や Web API との通信が必要な場合があるため、Unity で JavaScript コードを使用すると便利です。
ファイルタイプと Unity スクリプトとのインタラクション用の JavaScript プラグインの設定方法については、JavaScript プラグインの設定 を参照してください。代わりに C/C++/C# プラグインと相互作用する方法については、Unity C# スクリプトから C/C++/C# 関数を呼び出す を参照してください。
トピック | 説明 |
|---|---|
| JavaScript から Unity にさまざまな変数を渡す | Unity と JavaScript 間でさまざまな変数を渡す方法に関するヒント。 |
| それ自体のスコープでビルドコードを実行する | Unity と JavaScript 間のコードの可視性を向上させるためのヒント。 |
| JavaScript 関数を呼び出す Unity C# コードの例 | このサンプルコードは、Unity で JavaScript 関数を呼び出す方法を示しています。 |
| Unity プラグインをリファレンスとして使用する | Unity に含まれている、リファレンスとして使用できるプラグインのリストを示します。 |
JavaScript から Unity にさまざまな変数を渡す
JavaScript を Unity と統合するには、両者間の効率的な通信が必要です。JavaScript から Unity にさまざまな型のデータを渡す方法については、以下のヒントを参照してください。
数値型
単純な数値型は、変換せずに関数パラメーターで JavaScript に渡すことができます。
例えば、JavaScript のこの関数:
AddNumbers: function (x, y) { return x + y; },
は、変換なしで C# の整数値を受け入れます。
int result = AddNumbers(5, 7);
その他のデータ型は、Emscripten ヒープ内のポインターとして渡すことができます。Emscripten ヒープは JavaScript メモリ内の大きな配列にすぎません。
文字列
文字列を JavaScript 文字列に変換するには、 ヘルパー関数を使用します。
UTF8ToStringvar stringMessage = UTF8ToString("Hello World");
文字列値を返すには、メモリを割り当てるために を呼び出し、JavaScript 文字列をメモリに書き込むために ヘルパー関数を呼び出します。文字列が戻り値の場合は、IL2CPP ランタイムが自動的にメモリを解放します。
_mallocstringToUTF8var returnStr = "Hello World"; var bufferSize = lengthBytesUTF8(returnStr) + 1; var buffer = _malloc(bufferSize); stringToUTF8(returnStr, buffer, bufferSize);
配列
プリミティブ型の配列の場合、Emscripten はメモリを表すさまざまなサイズの整数、符号なし整数、浮動小数点のヒープに対して、異なる を提供します。、、、、、、、 などです。
ArrayBufferViewsHEAP8HEAPU8HEAP16HEAPU16HEAP32HEAPU32HEAPF32HEAPF64以下の関数は、 配列をループして、各インデックスの値を出力します。
HEAPF32PrintFloatArray: function (array, size) { for(var i = 0; i < size; i++) console.log(HEAPF32[(array >> 2) + i]); },
テクスチャ
WebGL のテクスチャにアクセスするために、Emscripten は 配列を提供し Unity から WebGL テクスチャオブジェクトへネイティブのテクスチャ ID をマップします。WebGL 関数は、Emscripten の WebGL コンテキスト で呼び出すことができます。
GL.texturesGLctx例えば、以下の関数は WebGL テクスチャを GL テクスチャ配列から 2D テクスチャにバインドします。
BindWebGLTexture: function (texture) { GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); },
それ自体のスコープでビルドコードを実行する
すべてのビルドコードはそれ自体のスコープで実行することを推奨します。コードがそれ自体のスコープにある場合は、埋め込みページのコードと競合することなくページにコンテンツを埋め込むことができます。また、同じページに複数のビルドを埋め込むこともできます。
.jslib プラグインのコード
プロジェクト内の JavaScript コードがすべて プラグインの形式である場合、この JavaScript コードはコンパイルされたビルドと同じスコープ内で実行され、コードは以前のバージョンの Unity と同じように動作します。JavaScript プラグインコードから直接見ることができるオブジェクトと関数には、以下のようなものがあります。
.jslibModuleSendMessageHEAP8ccall
グローバルスコープから JavaScript 関数を呼び出す
埋め込みページのグローバルスコープから内部 JavaScript 関数を呼び出す場合は、ウェブテンプレート で 変数を使用する必要があります。
index.htmlunityInstanceUnity エンジンのインスタンス化が成功した後に、例えば以下のように を使用します。
unityInstancevar MyGameInstance = null; script.onload = () => { createUnityInstance(canvas, config, (progress) => { /*...*/ }).then((unityInstance) => { MyGameInstance = unityInstance;
次に、 を使用してビルドにメッセージを送信したり、 を使用してビルドモジュールオブジェクトにアクセスしたりできます。
MyGameInstance.SendMessage()MyGameInstance.ModuleJavaScript 関数を呼び出す Unity C# コードの例
以下の JavaScript コードでは、 という名前の関数を作成します。この例では、このコードを JavaScript プラグインで使用して、Unity C# スクリプトで呼び出せるようにします。
HellomergeInto(LibraryManager.library, { Hello: function () { window.alert("Hello, world!"); },});
次に、Unity プロジェクトでこの C# コードを使用して、JavaScript コードから 関数を呼び出します。
Hellousing UnityEngine;using System.Runtime.InteropServices;public class NewBehaviourScript : MonoBehaviour { [DllImport("__Internal")] private static extern void Hello(); void Start() { Hello(); }}
さまざまな関数タイプを含む大きなコード例については、コード例: Unity で JavaScript および C/C++/C# 関数を呼び出す を参照してください。
Unity プラグインをリファレンスとして使用する
Unity のインストールフォルダーには、リファレンスとして使用できるプラグインがいくつかあります。
-
PlaybackEngines/WebGLSupport/BuildTools/lib -
PlaybackEngines/WebGLSupport/BuildTools/Emscripten/src/library*