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のルートビューを好き勝手できます。