こんにちは、Unityエンジニアのオオバです。
Unityは各プラットフォームごとの独自機能にも、
プラグインという形でアクセスする方法を提供しています。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
Unityはプラットフォームへアクセス可
スマホゲームならiOS、Android、
PCであればMac、Windows向けと
さまざまなプラットフォームがありますよね。
- Unity → iOSの機能(ObjC/Swift/C++)
- Unity → Androidの機能(Java)
- Unity → Macの機能(ObjC/Swift/C++)
といったUnity(C#)から、
iOSであればObjective-C(以下:ObjC)に
アクセスしてObjCからiOSの機能にアクセスする
といったことが可能だということです。
おもしろそうですよね。
本記事ではiOS向けの、
超簡単なネイティブプラグインを、
書いていきます。
対象読者
- ネイティブプラグインを書いたことがない
- 興味はあるがはじめ方がわからない
- ネイティブプラグイン超初心者
こういう方に向けた記事にしていきたいと思います。
今回はC++で書いたiOS向けの
ネイティブプラグインを作っていきます。
C++書いたことがない人でも分るレベルにしているため
安心してください。
iOSプラグインファイル側の作法
Assets/Plugins/iOS/
配下に格納するextern "C"{ }
でソースを囲む
Pluginsフォルダ
はルート階層に無くても大丈夫です。
💻ソースコード : SamplePlugin.cpp
extern "C"
{
float _fooPluginFunction ()
{
return 42.8F;
}
}
このサンプルは呼び出すと
42.8
が返却されるシンプルなプラグインです。
iOSの機能にアクセスしたくなる気持ちは一旦抑え、
基礎から学んでいきましょう。
C#側の作法
続きましてプラグインを呼び出す側
すなわちC#のの作法についてです。
[DllImport("__Internal")]
を記述static extern
で呼び出すプラグインメソッドを定義
💻ソースコード : UsePlugin.cs
public class UsePlugin : MonoBehaviour
{
// 戻り値の型をあわせることに注意が必要
[DllImport("__Internal")]
static extern float _fooPluginFunction();
void Start ()
{
_fooPluginFunction();
}
}
これだけでネイティブプラグイン実装は完了ですが、
動作は実機でビルドしないと出来ません。
動作チェックはログを出力して、
Xcodeのコンソールを見ながら確認します。
まとめ
ネイティブプラグインって
思っていたほど難しくなかった気がしませんか?
テストは実機ビルドが必要という面倒臭さはありますが、
Unityの外側の機能にアクセスできるという
世界の広がりをオオバは感じました。
ぜひ一度ネイティブプラグインを作って、
Unityの外側に広がる世界を感じていただければと思います。
今回のサンプルコードはコチラにアップしています。
Unityネイティブプラグインショートコード · GitHub
この記事が気に入ったらフォローしよう