4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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でのみ起動可能ということを書き忘れたため追記

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
4
Help us understand the problem. What are the problem?