UnityでAndroidアプリを作るとき、Android端末のOSバーションを取得するなど、Android特有の処理をさせたい時があります。
しかし、Android特有の処理をさせたいときUnity単体で実装が不可能です。
実現するためには、Android Studioを使うなどしてAndroid用のプラグインを作る必要があります。
この記事では、
・Android Studio3系にてUnityから呼び出すことができるAndroidライブラリー(プラグイン)の作成方法
・作成したプラグインをUnityから呼び出す方法
を解説します。
Android StudioでUnity用Androidライブラリーを作成する
新規にAndroidプロジェクトを作成する
新規にプロジェクトを作成します。Android Studioは直接ライブラリーを作ることができないので、仮のActivityを作成します。Activityは、Unityで使うライブラリーに含まれないので適当に作成しても問題ありません。
作成手順を記載します。
・「Create Android Project」で新規にプロジェクトを作成する
・Target Android Devices設定で任意に設定する。
・Basic Activityを選択する
上記の操作で、プロジェクトが作成されます。
次にライブラリーを作成します。
新規にライブラリーを作成する
ここからが本番!
ライブラリーを作成します。
・Android Libraryを選択する
・Android Libraryダイアログでminimum SDKを選択する
以上の操作でAndroid ライブラリーのプロジェクトが作成されました。
■Unity内にある「classes.jar」ファイルを設定する
・Unity内にある「classes.jar」を取り出します。
「classes.jar」は以下の場所(Unty5.6.6で確認)にあります。
UnityApp/PlaybackEngines/AndroidPlayer/Variations/mono/Development/Classes
■libsフォルダにUnityライブラリー「classes.jar」の設置
libsフォルダにUnityライブラリー「classes.jar」を配置します。
配置する場所は以下の通りです。
Root(作成しようとしているUnity AndroidライブラリーのRoot) -> libs
■「build.gradle」の編集
Unityライブラリーファイル「classes.jar」は、(自作しようとしている)Unity Androidライブラリーを書き出す際、ビルド後に出力されるaarファイル内に含めないようにします。
そのため以下の2つを「build.gradle」に記載する必要があります。
//出力するaarファイルにclasses.jarを含めない
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.packageLibrary.exclude('libs/classes.jar')
}
}
//classes.jarファイルは、コンパイルのときのみ使用する
//Android Studio 3系では、「implementation fileTree」と記述すると
//classes.jarも含まれてしまうため「compileOnly」と記載して
//jarファイルはコンパイルのみ使用するようにします。
dependencies {
//implementation fileTree(include: ['*.jar'], dir: 'libs') はNG
compileOnly fileTree(include: ['*.jar'], dir: 'libs')
}
Javaにて実装します
JavaにてAndroid用のソースコードを記載します。
実装例を記載します。
パッケージ名は以下の通りとする。
package com.unityplugin.jp.unitylib;
クラス名 NativeAndroidSample
package com.unityplugin.jp.unitylib;
public class NativeAndroidSample {
/**
* OSのバージョン情報を取得する
* @return OSのバージョン
*/
public static String GetOsInfo()
{
String str = "";
str = "Android:"+Build.VERSION.RELEASE;
return str;
}
}
メニューから
Build > Make Moduleを選択してライブラリーのビルドをします。
※ProjectはAndroid ライブラリー用のプロジェクトを選択した状態にしておくこと。
成功すると
build ->outputs->aarフォルダに「aarフォーマットのファイル」が出力されます。
Unity側の対応
Asset -> Plugins ->Android
にAndroid Studioで作成したaarファイルを設置します。
UnityからAndroid側プラグインの関数(メソッド)を呼び出す。
下に、C#のサンプルコードを記載します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AndroidNativeSample : MonoBehaviour {
// Use this for initialization
void Start () {
NativeCall();
}
void NativeCall(){
//Java側で設定したパッケージ名とクラス名を記載する
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unityplugin.jp.unitylib.NativeAndroidSample");
//メソッド名を設定する。
//戻り値はstring型のためカッコの部分にはstringを設定しています
//OS情報
string a = unityPlayer.CallStatic("GetOsInfo");
Debug.Log("unity os:" + a);
}
}
この結果、Unity側からAndoridのOSのバージョン情報を取得できるようになります。
最後にUnity側でAndroid用のビルドをします。
その結果、Android側のメソッドをUnity側から呼び出しができます。
まとめ
いかがですか?
Androidのプラグインを作るには、Javaなどのスキルが必要になりますが、プラグインを作れると開発の幅が広がります。