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上で動かすとしっかりとネイティブ側のコードが実行できているのが分かります。
(ちょっと分かりづらいですがText
が hogehoge1 となっているのがそうですw Unityで普通に実行すると hogehoge0 となります)