% cat

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

最新記事

「良いプロダクト」とは、どんなプロダクトのことでしょうか?

こんにちは! プロダクトオーナー兼開発部マネージャーをしている長谷川([@roki1801](https://github.com/roki1801))です。普段は山形県山形市にあるベーシックのサテライトオフィス「[山形ラボ](...

roki1801
2019年03月29日

大量アクセスに耐え得る在庫管理システムの構成を考え実装してみた

皆さん「在庫管理」ってどうしてます?itemsテーブルに、stockカラム作ってdecrementしてますか? まぁ正直、それでも良い感じしますよね。楽だし何やってるかわかりやすい。 しかし! **超人気商品に超ア...

mmusasabi
2019年03月13日

kubernetes で Ruby on Rails を動かして kubern...

巷で話題の kubernetes ですが、とってもとってもとっつきにくいですよね そんな kubernetes ですが手元で動かすことができたので解説してみます (情報が間違ってたらごめんなさい! 🙇) 目標はこちら ...

tkhr0
2019年03月07日