Kosaku Kurino

Kosaku Kurino

Unity用にアンドロイドプラグインを作成する際のメモ

Android Studioでの作業

android plugin 作成

"android studio"で適当にプロジェクトを作成 "android studio"で"android libraly"を作成

Unityと連携させるために、Unityのプログラムフォルダ?にある"classes.jar"を "android library"の"libs"フォルダにコピー "classes.jar"をaarに内包してコンパイルしてしまうと、Unityでのビルド時失敗する "classes.jar"をaarに内包させないよう、除外する

変更(gradle) implementation fileTree(dir: 'libs', include: ['*.jar']) ↓ compileOnly fileTree(dir: 'libs', include: ['classes.jar'])

追記(gradle) android.libraryVariants.all{ variant-> variant.outputs.each{output-> output.packageLibrary.exclude('libs/classes.jar') } }

スクリプト作成 Unityにメッセージを投げられるようUnityのクラスをimport

import static com.unity3d.player.UnityPlayer.UnitySendMessage;

クラスの引数にString形式の"callbackTarget"と"callbackMethod"を入れる UnitySendMessageにより、String形式の文字列をやりとりできるようになる UnitySendMessage(callbackTarget, callbackMethod, "onReadyForSpeech");

Unityでの作業

AndroidJavaClass TestClass = new AndroidJavaClass("パッケージ名.クラス名"); AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject context = unityPlayer.GetStatic("currentActivity");

context.Call("runOnUiThread", new AndroidJavaRunnable(() => { TestClass.CallStatic( "TestClassで定義しているfunction名", context, gameObject.name, "CallbackMethod" ); } ));

private void CallbackMethod(string message) { Debug.Log(message); }

これにより、aarで定義した関数を実行し、返り値をUnityで定義した関数に渡すことができる