# 静的ライブラリを Unity プラグインとしてコンパイルする

> Call functions from a static library.

Emscripten でライブラリをコンパイルし、Unity でライブラリを使用できます。関数の呼び出しは、プラグインディレクトリから直接 C++ コードを呼び出すよりも、C++ コードをカプセル化したライブラリから行う方が便利な場合があります。具体的には以下のメリットがあります。

* コードをウェブ Unity プロジェクトと統合しやすくなります。
* 特に大規模なライブラリでは、C++ コードから関数を呼び出すよりもコードのパフォーマンスが向上します。
* コードをさまざまなプロジェクトで再利用できます。

## Unity で静的ライブラリを使用する手順##steps-to-use-a-static-library-in-unity

Unity プラグインとして使用できる静的ライブラリをコンパイルするには、以下の手順を実行します。

1. [Emscripten SDK のダウンロード](#download-emscripten)
2. [既存のプロジェクトスクリプトの設定](#configure-compiler)
3. [コンパイラーオプションの更新](#compiler-options)
4. [静的ライブラリファイルのコンパイルとインポート](#import-c-files)
5. [C# スクリプトからの静的ライブラリ関数の呼び出し](#call-static-libr)

### 1. Emscripten SDK のダウンロード##1.-download-the-emscripten-sdk

使用している Unity のバージョンに合った Emscripten SDK をダウンロードする必要があります。

対象の Unity バージョンに適したバージョンの Emscripten を見つけるには、[Emscripten のウェブネイティブプラグイン](/engine/6000.0/manual/platform-specific/webgl/develop/native-plugins-with-emscripten.md)を参照してください。

Emscripten SDK のダウンロードリンクとインストール方法の詳細については、[ダウンロードとインストール](https://emscripten.org/docs/getting_started/downloads.html) (Emscripten) を参照してください。

### 2. 既存のプロジェクトスクリプトの設定##2.-configure-any-existing-project-scripts

Emscripten は、gcc または clang コンパイラーの代替として機能します。既存の C/C++ コードがある場合は、C++ プロジェクトで以下の変更を行う必要があります。

* C/C++ コンパイラーとして "emcc" を使用する
* 静的リンカーとして "emar" を使用する

詳細については、Emscripten のドキュメントで[プロジェクトのコンパイルと実行](https://emscripten.org/docs/compiling/index.html)を参照してください。

### 3. コンパイラーオプションの更新##3.-update-your-compiler-options

Unity プロジェクトに以下の **Player** 設定 (メニュー: **Edit** > **Project Settings** > **Player**) がある場合は、C/C++ プロジェクトに対していくつかのコンパイラーオプションの追加が必要な場合があります。

| プロパティ                                  | 説明                                                                                                                                               |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Enable Exceptions**                  | このプロパティが **None** に設定されている場合は、コンパイラーオプション "-fno-exceptions" を追加します。                                                                              |
| **Enable Native C/C++ Multithreading** | このプロパティが有効になっている場合は、コンパイラーオプション "-pthread" を指定します。                                                                                               |
| **Enable WebAssembly 2023**            | このプロパティが有効になっている場合は、以下のコンパイラーオプションを指定します。"-fwasm-exceptions""-sSUPPORT\_LONGJMP=wasm""-mbulk-memory""-mnontrapping-fptoint""-msimd128""-msse4.2" |

### 4. 静的ライブラリファイルのコンパイルとインポート##4.-compile-and-import-your-static-library-files

静的ライブラリファイルをコンパイルし、`Assets/Plugins` フォルダー内の Unity プロジェクトにファイルをインポートします。

**ノート**: **Plugins** フォルダーがない場合は、自分で作成する必要があります。

### 5.Unity C#スクリプトからの静的ライブラリ関数の呼び出し##5.-call-your-static-library-functions-from-unity-c-scripts

Unity C# スクリプトから静的ライブラリ関数を呼び出しことができます。関数の呼び出し方法は、C# スクリプトから C または C++ 関数を呼び出す場合と同じです。例については、[Unity C# スクリプトからの C/C++/C# 関数の呼び出し](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browsers-c-to-unity.md)を参照してください。

## 追加リソース##additional-resources

* [ブラウザースクリプトとの相互作用](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting.md)

* [JavaScript プラグインの設定](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-js.md)

* [Unity C# スクリプトから JavaScript 関数を呼び出す](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-js-to-unity.md)

* [Unity C# スクリプト関数を JavaScript から呼び出す](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-unity-to-js.md)

* [Unity C#、JavaScript、C/C++/C# コード間のコールバックの作成](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-example.md)
