📱
【Unity × Android】Java/Kotlinのソースプラグイン
ソースプラグインとは?
ソースプラグインは、Unityプロジェクト内にJavaまたはKotlinのソースコードを直接配置し、Unityのビルドプロセスで自動的にコンパイルされる仕組みです。.jar
や .aar
のような事前ビルド済みのライブラリを使用する代わりに、Unityプロジェクトで直接ソースコードを管理できます。
メリット:
- ソースプラグインは簡単に修正が可能。
- Android Studioでデバッグが可能。
- ビルド時に自動的にコンパイルされるため手間が省ける。
手順
1. Unityプロジェクトのセットアップ
- Unityプロジェクトを開きます。
-
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のセットアップ
- 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ビルドと動作確認
- UnityでAndroidビルド設定を行います。
- Androidデバイスにビルドをインストールして動作を確認します。
まとめ
手順 | ポイント |
---|---|
ソースコード配置 |
Assets/Plugins/Android/src にJava/Kotlinコードを配置 |
C#ラッパー作成 | AndroidJavaObject を使用してKotlinコードを呼び出す |
公式ドキュメント(AndroidJavaSourcePlugins)
Discussion