UnityでiOSのネイティブコードを呼び出す最も簡単でシンプルな方法

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

Feed

最新記事

開発フローを独自進化させ続けている開発チームの話

こんにちは CTO の [@zaru](https://twitter.com/zaru) です。 スクラム開発をしている開発チームが、開発フローを独自進化させていて、それが良い取り組みだったので紹介しようと思います。 #...

235650?v=4
zaru
2017年11月20日

退職者を招いたLTイベントを開催した

こんにちは、ベーシック CTO [@zaru](https://twitter.com/zaru) です。 ベーシック開発部では毎月月末の金曜日にTGIFと称して、 ~~飲み会 + アナログゲームなイベント~~ 技術 LT 大会...

235650?v=4
zaru
2017年10月12日

山形ラボ、TGIFはじめました

こんにちは。株式会社ベーシック山形ラボの長谷川です。 いろんなところで書いたりなんだりしてますが、弊社には山形に「山形ラボ」というリモート拠点がありまして、そこで4人のエンジニアが働いております。 今回は その山形ラボで、...

10917612?v=4
roki1801
2017年10月10日