ドキュメント

Unity Engine

Unity Engine

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 文字列に変換するには、
UTF8ToString
ヘルパー関数を使用します。
var stringMessage = UTF8ToString("Hello World");
文字列値を返すには、メモリを割り当てるために
_malloc
を呼び出し、JavaScript 文字列をメモリに書き込むために
stringToUTF8
ヘルパー関数を呼び出します。文字列が戻り値の場合は、IL2CPP ランタイムが自動的にメモリを解放します。
var returnStr = "Hello World"; var bufferSize = lengthBytesUTF8(returnStr) + 1; var buffer = _malloc(bufferSize); stringToUTF8(returnStr, buffer, bufferSize);

配列

プリミティブ型の配列の場合、Emscripten はメモリを表すさまざまなサイズの整数、符号なし整数、浮動小数点のヒープに対して、異なる
ArrayBufferViews
を提供します。
HEAP8
、
HEAPU8
、
HEAP16
、
HEAPU16
、
HEAP32
、
HEAPU32
、
HEAPF32
、
HEAPF64
などです。
以下の関数は、
HEAPF32
配列をループして、各インデックスの値を出力します。
PrintFloatArray: function (array, size) { for(var i = 0; i < size; i++) console.log(HEAPF32[(array >> 2) + i]); },

テクスチャ

WebGL のテクスチャにアクセスするために、Emscripten は
GL.textures
配列を提供し Unity から WebGL テクスチャオブジェクトへネイティブのテクスチャ ID をマップします。WebGL 関数は、Emscripten の WebGL コンテキスト
GLctx
で呼び出すことができます。
例えば、以下の関数は WebGL テクスチャを GL テクスチャ配列から 2D テクスチャにバインドします。
BindWebGLTexture: function (texture) { GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); },

それ自体のスコープでビルドコードを実行する

すべてのビルドコードはそれ自体のスコープで実行することを推奨します。コードがそれ自体のスコープにある場合は、埋め込みページのコードと競合することなくページにコンテンツを埋め込むことができます。また、同じページに複数のビルドを埋め込むこともできます。

.jslib プラグインのコード

プロジェクト内の JavaScript コードがすべて
.jslib
プラグインの形式である場合、この JavaScript コードはコンパイルされたビルドと同じスコープ内で実行され、コードは以前のバージョンの Unity と同じように動作します。JavaScript プラグインコードから直接見ることができるオブジェクトと関数には、以下のようなものがあります。
  • Module
  • SendMessage
  • HEAP8
  • ccall

グローバルスコープから JavaScript 関数を呼び出す

埋め込みページのグローバルスコープから内部 JavaScript 関数を呼び出す場合は、ウェブテンプレート
index.html
で
unityInstance
変数を使用する必要があります。
Unity エンジンのインスタンス化が成功した後に、例えば以下のように
unityInstance
を使用します。
var MyGameInstance = null; script.onload = () => { createUnityInstance(canvas, config, (progress) => { /*...*/ }).then((unityInstance) => { MyGameInstance = unityInstance;
次に、
MyGameInstance.SendMessage()
を使用してビルドにメッセージを送信したり、
MyGameInstance.Module
を使用してビルドモジュールオブジェクトにアクセスしたりできます。

JavaScript 関数を呼び出す Unity C# コードの例

以下の JavaScript コードでは、
Hello
という名前の関数を作成します。この例では、このコードを JavaScript プラグインで使用して、Unity C# スクリプトで呼び出せるようにします。
mergeInto(LibraryManager.library, { Hello: function () { window.alert("Hello, world!"); },});
次に、Unity プロジェクトでこの C# コードを使用して、JavaScript コードから
Hello
関数を呼び出します。
using 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*

追加リソース