こんにちは、Unityエンジニアのオオバです。

Unityは各プラットフォームごとの独自機能にも、
プラグインという形でアクセスする方法を提供しています。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

Unityはプラットフォームへアクセス可

スマホゲームならiOS、Android、
PCであればMac、Windows向けと
さまざまなプラットフォームがありますよね。

といったUnity(C#)から、
iOSであればObjective-C(以下:ObjC)に
アクセスしてObjCからiOSの機能にアクセスする
といったことが可能だということです。

おもしろそうですよね。

本記事ではiOS向けの、
超簡単なネイティブプラグインを、
書いていきます。

対象読者

こういう方に向けた記事にしていきたいと思います。

今回はC++で書いたiOS向け
ネイティブプラグインを作っていきます。

C++書いたことがない人でも分るレベルにしているため
安心してください。

iOSプラグインファイル側の作法

Pluginsフォルダはルート階層に無くても大丈夫です。

💻ソースコード : SamplePlugin.cpp
extern "C"  
{
    float _fooPluginFunction ()  
    {
        return 42.8F;  
    }
}

このサンプルは呼び出すと
42.8が返却されるシンプルなプラグインです。

iOSの機能にアクセスしたくなる気持ちは一旦抑え、
基礎から学んでいきましょう。

C#側の作法

続きましてプラグインを呼び出す側
すなわちC#のの作法についてです。

💻ソースコード : UsePlugin.cs
public class UsePlugin : MonoBehaviour  
{
    // 戻り値の型をあわせることに注意が必要  
    [DllImport("__Internal")]  
    static extern float _fooPluginFunction();  

    void Start ()  
    {
        _fooPluginFunction();  
    }
}

これだけでネイティブプラグイン実装は完了ですが、
動作は実機でビルドしないと出来ません。

動作チェックはログを出力して、
Xcodeのコンソールを見ながら確認します。

まとめ

ネイティブプラグインって
思っていたほど難しくなかった気がしませんか?

テストは実機ビルドが必要という面倒臭さはありますが、
Unityの外側の機能にアクセスできるという
世界の広がりをオオバは感じました。

ぜひ一度ネイティブプラグインを作って、
Unityの外側に広がる世界を感じていただければと思います。

今回のサンプルコードはコチラにアップしています。
Unityネイティブプラグインショートコード · GitHub

オススメ記事
参考サイト