#環境
Unity5.6.1f1
AndroidStudio2.3.2
#AndroidStudio用プロジェクトの作成
・Unityを起動し、プロジェクトを作成する(例:TestAndroidPlugin)
・Androidにスイッチし、バンドルIDを設定する(例:com.example.testandroidplugin)
・MinimumAPILevelを設定する(例:Android4.1 APILevel16)
・BuildSettingを開き、「Build System」をGradle(New)に変更する
・「ExportProject」、「DevelopmentBuild」にチェックし、「Export」を押す
・Unityプロジェクトと同じフォルダにExport用フォルダを作成し、フォルダに移動してから「フォルダの選択」を押す(例:TestAndroidPlugin\Android)
・AndroidStudio用プロジェクトが生成される
#AndroidStudioで読み込む
・AndroidStudioを開く
・「Import Project(EclipseADT,Gradle,etc) 」を押し、AndroidStudio用プロジェクトを生成したフォルダを開き、「build.gradle」を選択し、「OK」を押す
・「Gradle settings for this project are not configured yet.」ダイアログが出るので「OK」を押す
・プロジェクトが読み込まれる
・この時点で以下のエラーが出ている
Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
Possible causes for this unexpected error include:
・左上の縦に並んでいる「Project」をクリックし、プロジェクトのツリーが見えるようにする
・「GradleScript」からbuild.gradleを選択し、開く
・上部に記載されている以下の部分をcom.android.tools.build:gradle:2.3.2に変更する
2.3.2はAndroidStudioのバージョン名 自分の環境で変更する(タイトルに表示されている)
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
・右上に出ている「TryAgain」を押す
・エラーが消える
※この項目の以下の作業はAndroidStudio上でアプリケーションのビルドを行わない場合(プラグインのビルドの事ではない)は要らない。つまり今回は要らない
・プロジェクトツリーから一番上のプロジェクト名(例:TestAndroidPlugin)を選択し、右クリックし、「OpenModuleSetting」を押す
・「Flavors」タブを選択し、MinSdkVersionをUnityに設定したものと同じに設定する(例:API16)
・選択にない場合はメニューの「Tool」>「Android」>「SdkManaager」からインストールする
・「OK」を押す
#プラグインモジュールの追加
・メニューの「File」>「New」>「NewModule」を押す
・「AndroidLibrary」を選択し、「Next」を押す
・「Application/Library name」を設定する(例:UnityPlugin)
・「Package name」を右側の「edit」を押し、設定し、「done」を押す(例:com.example.unityplugin)
・「MinimumSDK」をUnityに設定したものと同じか、小さいものに設定する(例:API16)
・「Finish」を押す
・モジュールが生成され、プロジェクトツリーのルートの2番目にモジュールのツリーが追加される
・この時点でエラーが5つほど表示される
・プロジェクトツリーの「GradleScript」>「build.gradle(Module:プライグイン名)」(2番目)を選択し、開く
・「apply plugin: 'com.android.library'」の行の下に以下を追加する
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
・右上に出ている「TryAgain」を押す
・エラーが消える
・「dependencies」{}内の最後に以下を追加する
compile files('../libs/unity-classes.jar')
・ファイルの最後に以下を追加する
・OUTPUT_NAMEは任意の名前に変更する
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.packageLibrary.exclude('libs/unity-classes.jar')
}
}
def OUTPUT_NAME='testplugin.aar'
task exportAar(type: Copy) {
from('build/outputs/aar/')
into('../../../Assets/Plugins/Android/')
include('unityplugin-release.aar')
rename('unityplugin-release.aar', OUTPUT_NAME)
}
exportAar.dependsOn(build)
・右上に出ている「SyncNow」を押す
#プラグイン用javaクラスの追加
・プロジェクトツリーから「プラグイン名」>「Java」>「パッケージ名」を選択(例:unityplugin>Java>com.example.unityplugin)
・(AndroidTest)や(Test)と書かれていないもの(一番上)
・メニューの「File」>「New」>「JavaClass」を押す
・「Name」を設定(例:TestPlugin)
・「OK」を押す
・以下はトースト表示する簡単なサンプル
package com.example.unityplugin;
import android.app.Activity;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
public class TestPlugin
{
public static void showToast(final String message) {
final Activity activity = UnityPlayer.currentActivity;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
}
});
}
}
#プラグインのビルド
・プロジェクトツリーから「プラグイン名」を選択(例:unityplugin)
・メニューの「Build」「Select Build Variant」を押す
・「debug」を「Release」に変更
・右上の縦に並んでいる「Gradle」をクリックし、開く
・「Plugin名」>「Other」>「exportAar」をダブルクリック
・ビルドが実行され、Unityプロジェクトの「Assets/Plugins/Android/」に生成される
・aarのサイズは16K程度
#プラグインのテストプログラム
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TestPlugin : MonoBehaviour
{
[SerializeField] private Button _button = null;
private void Start()
{
_button.onClick.AddListener( () => OnButtonClick( _button ) );
}
private void OnButtonClick( Button button )
{
using (AndroidJavaClass javaClass = new AndroidJavaClass( "com.example.unityplugin.TestPlugin" ) )
{
Debug.Log( "OnButtonClick" );
javaClass.CallStatic( "showToast", "Test" );
}
}
}