Unity
AndroidNDK

Visual Studio 2015 RCを使用したAndroidPulugin作成

More than 3 years have passed since last update.

Visual Studio 2015 RCをインストール

ファイル -> 新規作成 -> プロジェクト
1.png
で新しプロジェクトというウィンドウが出てくる

Visual C++ -> ClossPlatform -> ダイナミック共有ライブラリ
2.png

を選択しプロジェクトを作成する

ダイナミック共有ライブラリがなかった場合インストーラーを起動し「変更」を選択
オプションの中からVisualC++モバイル開発を選択をして次へを押す
その後更新を押すとインストールが始まる

プロジェクトを作成するとヘッダーファイル(.h)が二つとソースファイル(.cpp)が一つある
ソースファイル内のextern"C"のスコープ内に関数を追加して書く

Pulugin.cpp
extern"C"{
    int Test1(int i){
        return i*100;
    }
}

上部にあるアクティブソリューション構成をDebugからReleaseに変える
3.png

デバック -> (プロジェクト名)のプロパティ
4.png

を開き
構成プロバティ -> 全般 の中にある ターゲット名を変える
5.png

初期では
lib$(RootNamespace)
となっている。
これを
libAndroid$(RootNamespace)
のようにプラグイン名を追加する
デフォルトのターゲット名ではビルドしたときにlib.soというファイルができるがUnityで使用する際には最初のlibと.soは省くという決まりがあるために追加する

ビルド -> ソリューションのビルド
6.png

を選択する

できた.soファイル(上記の例ではlibAndroid.so)はUnityのプロジェクトの
Asset -> Plugins -> Android フォルダに入れる

使用する際は

test.cs
#if UNITY_ANDROID && !UNITY_EDITOR
 [DllImport("Android", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern int Test1(int i);
#endif

と記述するとAndroidでのみ使用できるようになる

この方法で作成したプラグインはAndroid以外のプラットフォームでは使用できないため
Windows等の別プラットフォームで作成する場合別にプラットフォームを作成しなければならない
この時関数名を同じにしておけば以下のように書ける

test.cs
#if UNITY_ANDROID && !UNITY_EDITOR
 [DllImport("Android", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
#else
 [DllImport("WindowsDll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
#endif
private static extern int Test1(int i);

以下はWindowsDll.dllというWindowsプラグインに同じような関数を記述したものである

Pulugin.cpp
extern"C"{
   __declspec(dllexport) int Test1(int i){
        return i*100;
    }
}

DllImportを使用するためには以下を記述する
using System.Runtime.InteropServices;

※7/2 Androidでのみ起動可能ということを書き忘れたため追記