プラグイン公式ドキュメント特筆事項メモ
目的
プラグインの公式ドキュメント内で抑えておく箇所のメモ。
https://docs.unity3d.com/ja/2022.3/Manual/NativePlugins.html
マネージプラグイン
- .NETコードで作成された.NETアセンブリ。DLLとして扱う。
ネイティブプラグイン
- ネイティブコードによって作成されたプラグイン
- Unityでアクセスできない機能を提供する
- ネイティブ側のイベントにフックさせることも可能
- プラグイン関数はUnity側ではC言語呼び出しインターフェースとして提供されるので、名前マングリングを避ける必要がある。
- 名前マングリングとは
- 避けるためにCリンケージを宣言してC言語としてプラグイン側の関数を宣言する。
iOS
- Unity側でプラグイン関数を宣言する際には、DLLImport Attributeに__internalを渡す必要がある。
- iOS/macOSでは静的リンクが行われるため、バインド先のdllが存在しない、そのため__internalを渡す。
- iOS/macOSには制限があり、動的に生成されたコードの実行が禁止されているため。
対応プラグイン一覧
プラグイン設定
- 特定のフォルダ名を指定することでバンドルされたプラグインとして扱える。
- 1つのプラグインとして見なされるとのこと。
- 利点は不明
- 対応フォルダ名
- .androidlib
- .bundle
- .framework
- .plugin
- 1つのプラグインとして見なされるとのこと。
共通
- プラグインのデフォルト設定
- 特定のファイルパスになっている場合にデフォルト設定が付与される。
- どのパスにも一致しない場合はエディタデフォルト設定が付与される。
- iOS
- Assets/Plugins/iOS
- Editor
- Assets/../Editor/(x86 or x86_64 or x64)
- Windows/Linux/macOS
- Assets/../Plugins/(x86_64 or x86 or x64)
- 特定のファイルパスになっている場合にデフォルト設定が付与される。
マネージプラグイン
- Auto Reference
- 無効にすることでアクセスできるスクリプトを制限できる
- コンパイル時間が短縮される。依存するアセンブリのみコンパイルされるため。
- asmdef管理が必要だが、基本的にfalseにしておくと良い。
- 無効にすることでアクセスできるスクリプトを制限できる
- Validate Reference
- プラグインが利用可能か調べる。ランタイムエラーを避けられる為、有効にしておくと良い。
- Define Constraints
- Defineを元にプラグインを実際にロードするかどうかを決められる。
その他Tips
マネージプラグイン
- Unityをdll配置することで、マネージプラグイン内でUnity APIを使用することも可能。
ネイティブプラグイン
- エディタ上の挙動として、プラグインを一度インポートすると、ネイティブのプラグインはアンロードできないのでUnity自体を再起動する必要がある。