UnityでAndroid JARファイルを呼び出す最も簡単な方法 - Androidネイティブプラグイン こちらで、AndroidJARファイルをUnityから呼び出す方法を紹介しましたが、今回はiOSのネイティブコードを呼び出す方法を紹介します。

C#スクリプトでネイティブコードを呼ぶ

using UnityEngine;
using System.Runtime.InteropServices;

public class NativePlugin { 
    [DllImport("__Internal")]
    private static extern void hoge_();
    public static void hoge() {
        if (Application.platform != RuntimePlatform.OSXEditor) {
            hoge_();
        }
    }
}

ファイル名はクラス名に合わせて、NativePlugin.cs とでもして、/Assets/Plugins/ 以下に配置します。

C#としては、hoge() というメソッドを作り、その中で extern した hoge_() を実行します。もちろん引数なども使えます。

ネイティブコードを用意する

extern "C" {
    void hoge_();
}
void hoge_() {
    NSLog(@"#hoge");
}

ファイル名は NativePlugin.cs のクラス名に合わせて NativePlugin.mm として、/Assets/Plugins/iOS/ 以下に配置します。

準備はこれだけです。

ネイティブコードを呼び出す

NativePlugin.cs を直接使ってもいいんですが、使いまわすことが多いと思うので、NativePlugin.cs を呼ぶ Test.cs を作ります。

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class Test : MonoBehaviour {
    void Start () {
        NativePlugin.hoge();
    }
    void OnGUI() {
    }
}

あとはTest.csをUnityのシーンに関連付けてあげれば起動時に、NSLog() が実行されます。簡単ですね。

Unityのシーン上にUIView的なものを置きたい

広告バナーだったり、なんかWebView的なものでもいいんですが、Objective-Cで作ったなんかしらをUnityの上に載せたいことってありますよね。それも簡単に出来ます。

Objective-C側でUnityのUIViewControllerを捕まえられます。

extern UIViewController* UnityGetGLViewController();

void hoge_() {
    UIViewController* parent = UnityGetGLViewController();

    UIView *uv = [[UIView alloc] init];
    uv.frame = CGRectMake(0, 0, 100, 100);
    uv.backgroundColor = [UIColor blueColor];

    [parent.view addSubview:uv];
}

これでUnityのルートビューを好き勝手できます。



blog comments powered by Disqus