JAR形式ではなく、java形式のAndroid Javaプログラムを直接Unityプロジェクトに追加して、Androidプラグインとして利用する方法の備忘録です。
Unityマニュアル
Java や Kotlin のソースファイルをプラグインとして使用 - Unity マニュアル
JavaファイルのプラグインサポートはUnity2018.2から追加されています。
プラグイン配置
プロジェクトのAssetsフォルダ以下の任意の場所に、Plugins/Androidフォルダを作成して、Javaファイルを配置します。
C#からJavaの呼び出し
using UnityEngine; public class TestBehaviour : MonoBehaviour { void Start() { AndroidJavaObject android = new AndroidJavaObject("unity.android.plugin.AndroidPlugin"); android.Call("receiveUnity"); } }
package unity.android.plugin; import com.unity3d.player.UnityPlayer; public class AndroidPlugin { public void receiveUnity() { // ここが呼ばれる } }
JavaからC#の呼び出し
JavaからUnity側の呼び出しは、シーンに配置されているオブジェクトにアタッチされたMonoBehaviourの関数に限定されます。
以下のコード例ではシーン上にReceiverという名前のGameObjectがあり、TestBehaviourがアタッチされた状態の時にPluginMessageが呼ばれます。
using UnityEngine; public class TestBehaviour : MonoBehaviour { public void PluginMessage(string message) { } }
package unity.android.plugin; import com.unity3d.player.UnityPlayer; public class AndroidPlugin { public void sendUnity() { // Object名、関数名、メッセージ. UnityPlayer.UnitySendMessage("Receiver", "PluginMessage", "message"); } }
Unity側に送れる情報は1つまでなので、複数の情報を送りたい場合はJson形式やカンマ区切りなどで1つの文字列にまとめて送る感じになります。
パーミッション追加
利用する機能によって権限の要求が必要な場合には、AndroidManifestをプロジェクトに追加します。
AndroidManifestの配置はプラグインの配置と異なり、Assets/Plugins/Androidフォルダ以下に限定されているようです。
{Unityをインストールしたフォルダ}/PlaybackEngines/AndroidPlayer/Apk
以下にあるUnityManifest.xml
の内容をベースに、Assets/Plugins/Android
以下にAndroidManifest.xml
を新規で作成します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools"> <application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> <!-- 以下にパーミッションを追加 --> </manifest>