📱

【Unity × Android】Java/Kotlinのソースプラグイン

に公開

ソースプラグインとは?

ソースプラグインは、Unityプロジェクト内にJavaまたはKotlinのソースコードを直接配置し、Unityのビルドプロセスで自動的にコンパイルされる仕組みです。.jar.aar のような事前ビルド済みのライブラリを使用する代わりに、Unityプロジェクトで直接ソースコードを管理できます。

メリット:

  • ソースプラグインは簡単に修正が可能。
  • Android Studioでデバッグが可能。
  • ビルド時に自動的にコンパイルされるため手間が省ける。

手順

1. Unityプロジェクトのセットアップ

  1. Unityプロジェクトを開きます。
  2. Assets/Plugins/Android/ フォルダを作成します。
    • このフォルダにJava/Kotlinのコードを配置します。

2. Unityプロジェクト設定

Unityでは、src フォルダが含まれているとAndroidのGradleビルドプロセスで自動的にソースコードがビルドされます。

必要なディレクトリ構造:

Assets/Plugins/Android/src/com/example/mylibrary/ 内に配置してください。


3. Kotlinソースコードの作成

以下のコードは、端末のバッテリー温度を取得するKotlinクラスの例です。

TemperatureHelper.kt

package com.example.mylibrary

import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager

class TemperatureHelper {

    fun getTemperature(context: Context): Float {
        val intent = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
        val temperature = intent?.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1) ?: -1
        return if (temperature != -1) {
            temperature / 10.0f // 温度を摂氏で取得
        } else {
            -1.0f // エラーの場合
        }
    }
}
  • Assets/Plugins/Android/ 以下のフォルダ階層は、Java/Kotlinのパッケージ名に対応させます。

4. Unityでの呼び出しコード

C#スクリプトでプラグインを呼び出します。

TemparaturePluginWrapper.cs

以下を Unity プロジェクトに追加します。

using UnityEngine;

public class TemperaturePluginWrapper
{
    private const string PluginClassName = "com.example.mylibrary.TemperatureHelper";

    public float GetTemperature()
    {
        using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                using (AndroidJavaObject batteryHelper = new AndroidJavaObject(PluginClassName))
                {
                    return batteryHelper.Call<float>("getTemperature", currentActivity);
                }
            }
        }
    }
}

5. Unityでのテスト

UIのセットアップ

  1. TextコンポーネントをCanvas上に追加します。

TemperatureDisplay.cs

using UnityEngine;
using UnityEngine.UI;

public class TemperatureDisplay : MonoBehaviour
{
    public Text temperatureText;

    private void Update()
    {
        ShowBatteryTemperature();
    }

    public void ShowBatteryTemperature()
    {
        TemperaturePluginWrapper plugin = new TemperaturePluginWrapper();
        float temperature = plugin.GetTemperature();

        if (temperature >= 0)
        {
            temperatureText.text = $"Battery Temperature: {temperature}°C";
        }
        else
        {
            temperatureText.text = "Failed to get battery temperature.";
        }
    }
}

6. Androidビルドと動作確認

  1. UnityでAndroidビルド設定を行います。
  2. Androidデバイスにビルドをインストールして動作を確認します。

まとめ

手順 ポイント
ソースコード配置 Assets/Plugins/Android/src にJava/Kotlinコードを配置
C#ラッパー作成 AndroidJavaObject を使用してKotlinコードを呼び出す

公式ドキュメント(AndroidJavaSourcePlugins

Discussion