37
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Unity] iOSでネイティブコードと連携をする(DllImport)

Posted at

Unityは様々なPlatformに向けてビルドすることができます。
が、やはり特定のPlatformでのみ動作する機能などを実装する必要がある場合があります。
そのときに使うのがネイティブとのブリッジの仕組みです。

基本的にはAsset/Plugins/iOSディレクトリにネイティブコード(サンプルではc)を配置し、Asset/PluginsディレクトリにブリッジとなるC#コードを配置しておく感じです。

サンプルコード

VersionNumber.c
float VersionNumber() {
    return 1.0f;
}
NativeTest.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Runtime.InteropServices;

public class NativeTest : MonoBehaviour { 

	[SerializeField]
	Text m_text;

	[DllImport("__Internal")]
	private static extern float VersionNumber();

	void Start () {
		float i = VersionNumber();
		m_text.text = "hogehoge" + i;
	}
}

[DllImport("__Internal")]属性を使ってそれが外部で定義されていることを宣言します。
__Internalは静的にリンクしたライブラリの場合に利用するようです。

ディレクトリ構造

ディレクトリ構造

配置したのはこんな感じです。
(ただC#のほうは「Plugins」に入れなくても大丈夫です)

実際にiPhone上で動かすとしっかりとネイティブ側のコードが実行できているのが分かります。
(ちょっと分かりづらいですがTexthogehoge1 となっているのがそうですw Unityで普通に実行すると hogehoge0 となります)

cap.jpg

参考記事

37
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?