Version: Unity 6.0 (6000.0)
言語 : 日本語
Customize error handling
Unity C# スクリプト関数を JavaScript から呼び出す

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

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 のこの関数: js 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 を提供します。HEAP8HEAPU8HEAP16HEAPU16HEAP32HEAPU32HEAPF32HEAPF64 などです。

以下の関数は、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.htmlunityInstance 変数を使用する必要があります。

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*

追加リソース

Customize error handling
Unity C# スクリプト関数を JavaScript から呼び出す