# デスクトッププラットフォーム用プラグインのビルド

> Deploy native code libraries for macOS, Windows, and Linux.

デスクトッププラットフォーム用のプラグインは、C、C++、Objective C で書くことができるネイティブコードのライブラリです。ここでは、macOS、Windows、Linux のためのプラグインを説明します。詳細については、[ネイティブプラグイン](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md) を参照してください。

## macOS プラグイン##macos-plug-ins

macOS プラグインはバンドルとして展開することができますが、**IL2CPP** スクリプティングバックエンド (緩い C++ ファイル) を使用する場合は、`[DllImport("__Internal")]` 構文で呼び出すことができます。緩い C++ プラグインの詳細については、[IL2CPP のための C++ ソースコードプラグイン](/engine/6000.0/manual/platform-specific/apple-mac/macosdevelopment/mac-osil2cppscripting-backend.md) を参照してください。

Xcode でバンドルプロジェクトを作成するには、以下を行います。

1. Xcode を開きます。
2. **File** > **New** > **Project** > **macOS** > **Framework & Library** > **Bundle** の順に選択します。

Xcode を使う作業についての詳細は、[Apple の Xcode に関するドキュメント](https://developer.apple.com/documentation/xcode) を参照してください。

### 要件##requirements

* プラグインは、64 ビットアーキテクチャと互換性のあるユニバーサルバイナリとしてビルドすることができます。あるいは、別の dylib ファイルを提供することもできます。
* C++ (`.cpp`) または Objective-C (`.mm`) を使用してプラグインを実装する場合、名前マングリングを避けるために C リンケージで関数を宣言してください。

```
extern "C"
{
  float ExamplePluginFunction ();
}
```

## Windows プラグイン##windows-plug-ins

Windows のプラグインは、エクスポートされた関数を持つ `.dll` ファイル、または、IL2CPP を使用している場合は、緩い C++ ファイルです。`.dll` ファイルを作成できる大抵の言語や開発環境でプラグインを作成できます。C リンケージを持つ C++ 関数を宣言して、名前マングリングの問題を避ける必要があります。

## Linux プラグイン##linux-plug-ins

Linux 上のプラグインは、エクスポートされた関数を持つ `.so` ファイルです。これらのライブラリは、通常 C または C++ で書かれていますが、どの言語でも使用できます。C リンケージを持つ C++ 関数を宣言して、名前マングリングの問題を避ける必要があります。

Linux 用のネイティブプラグインをビルドするときに、ビルドしたライブラリが別のネイティブプラグインと依存関係にある場合は、コンパイル時にそのライブラリの `rpath` を指定する必要があります。

リンカーフラグ `-Wl, -rpath=$ORIGIN` を追加して、ランタイム検索パスを指定します。このリンカーフラグは、システム検索パスの検索に加えて、ライブラリの現在のディレクトリで依存関係を検索するようにローダーに指示します。`-Wl, -rpath=$ORIGIN` とともに他のリンカーフラグを追加できますが、Unity はそれらをコントロールしません。例えば、`/usr/bin/g++ -o binary.c.o -Wl,-rpath=$ORIGIN`。

または、環境に `LD_LIBRARY_PATH=dependency path` を設定して、そのパスで依存関係を検索するようにローダーに指示することもできます。Linux は、依存関係を現在のディレクトリで自動的に検索しません。誤ったパスは Unity エディターでライブラリが見つからないエラーの原因となるため、依存関係の検索パスを正しく設定してください。

## Unity 内のプラグインの管理##managing-plug-ins-inside-unity

Unity では、**Plugin Inspector** がプラグインを管理します。**Plugin Inspector** にアクセスするには、**Project ウィンドウ** でプラグインファイルを選択します。スタンドアロンプラットフォームの場合は、ライブラリと互換性のある CPU アーキテクチャを選択します。クロスプラットフォームのプラグインの場合は、`.bundle` ファイル (macOS の場合)、`.dll` ファイル (Windows の場合)、`.so` ファイル (Linux の場合) を加える必要があります。Unity は、ターゲットプラットフォームに適したプラグインを自動的に選択し、プレイヤーに加えます。詳細については、[プラグインのインポートと設定](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/plug-in-inspector.md) を参照してください。


**プラグインインスペクター:**
![](/api/media?file=/engine/6000.0/media/images/plugin-inspector.png)

## C# スクリプトからプラグインを呼び出す##invoking-your-plug-in-from-a-c-script

ビルドしたプラグインは、Unity プロジェクトの **Assets** フォルダーまたは、アーキテクチャ特有の適切なサブディレクトリに配置する必要があります。C# スクリプトから呼び出すと、Unity は名前でそれを見つけます。例えば、`[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();`。

**ノート**: `PluginName` 値に、ライブラリプレフィックスまたはファイル拡張子を含めないでください。例えば、プラグインファイルの実際の名前が Windows では `PluginName.dll`、Linux では `libPluginName` の場合、値はどちらも `PluginName` にする必要があります。

## プラグインの例##unload-a-plug-in

これらのプロジェクトをダウンロードして使用することで、Unity でのプラグイン実装の方法を学ぶことができます。

* [最もシンプルなプラグインの例](https://github.com/Unity-Technologies/DesktopSamples/tree/master/SimplestPluginExample):このプロジェクトでは、基本的な操作 (例えば、数字の表示、文字列の表示、2 つの Float の加算、2 つの int の加算など) を実装します。このプロジェクトには、Windows、macOS、Linux のプロジェクトファイルが含まれています。
* [ネイティブレンダラープラグイン](https://github.com/Unity-Technologies/NativeRenderingPlugin):これは、低レベルのレンダリングプラグインです。通常のレンダリングがすべて完了した後、C++ コードから回転する三角形を描画し、 Texture.GetNativeTexturePtr を使って C++ コードにアクセスすることで、C++ コードからプロシージャルなテクスチャを埋めます。このプロジェクトには、Windows、UWP、macOS、ウェブ、Android のファイルが含まれています。

## 追加リソース##example-plug-ins

* [# マネージプラグイン](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md)
* [ネイティブプラグイン](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md)
* [ネイティブプラグインインターフェース](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native-plugin-interface.md)
