0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityPlugin/Android/基本

Last updated at Posted at 2020-09-21

#[環境]
OS: windows10 pro
IDE:Android Studio4.0.1
Unity 2019.4.5f1
確認した実機: Galaxys8

#[参考]

[Android用Plugin(java[aar])の作成(https://qiita.com/fukaken5050/items/c9ac144344c5f6ff9f57)
https://dream-target.jp/2019/01/04/unity_android/
https://qiita.com/okuhiiro/items/1aaec487d1ab8b086095
https://ghoul-life.hatenablog.com/entry/2019/01/26/030622
https://note.com/attomicgm/n/ncb22f460e8b6
https://gaprot.jp/2020/03/30/unity-android-native-plugin/

https://baba-s.hatenablog.com/entry/2018/09/18/170000 確認済

本文

UnityでAndroidProjectを出力する

・適当にCUBE等を配置する。
・Unityでプロジェクトを作成する(例:TestAndroidPlugin)
・「ExportProject」「DevelopmentBuild」にチェックします。
image.png

・AndroidにスイッチしバンドルIDを設定する。
・com.ore.TestAndroidPlugin) → Javaでは重要なので意識してください。com.ore.TestAndroidPluginとなってる華胥ありますが私はここでつまづきました
・MinimumAPILevelを設定する(例:Android4.4 APILevel19) デフォルト
image.png

・Unityプロジェクトと同じフォルダにExport用フォルダを作成し、フォルダに移動してから「フォルダの選択」を押す(例:TestAndroidPlugin\Android)
 ・AndroidStudio用プロジェクトが生成される

AndroidStudioで読み込む

UnitySDKかAndroidStudioのSDKを使うか指定する。
image.png

プロジェクト解析にすこし時間がかかります。
・ビルドエラーは出ず問題なく実行できます。

image.png

#Unityの機能をAndroidから使うため、classes.jar/android.jarを配置します。
今回の環境では以下に存在しました。
C:\Program Files\Unity\Hub\Editor\2019.4.5f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

C:\Users\user\AppData\Local\Android\Sdk\platforms\android-30
C:\Android\SDK\platforms\android-30

プラグインモジュールの追加

・メニューの「File」>「New」>「NewModule」を押す
 ・「AndroidLibrary」を選択し、「Next」を押す
image.png

 ・「Application/Library name」を設定する(例:UnityPlugin)
 ・「Package name」を右側の「edit」を押し、設定し、「done」を押す(例:com.ore.unityplugin)
 ・「MinimumSDK」をUnityに設定したものと同じか、小さいものに設定する(例:API23)
image.png

 ・「Finish」を押す

■「build.gradle」の編集

Unityライブラリファイル"unity-classes.jar"(またはclasses.jar)を、出力されるaarファイルに含めないようにします。

//classes.jarファイルは、コンパイルのときのみ使用する
//Android Studio 3系では、「implementation fileTree」と記述すると
//classes.jarも含まれてしまうため「compileOnly」と記載して
//jarファイルはコンパイルのみ使用するようにします。

dependencies {
    //implementation fileTree(dir: "libs", include: ["*.jar"])  NG
    compileOnly fileTree(dir: 'libs', include: 'unity-classes.jar')

    implementation 'androidx.appcompat:appcompat:1.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

 ・右上に出ている「SyncNow」を押す

#プラグイン用javaクラスの追加

・プロジェクトツリーから「プラグイン名」>「Java」>「パッケージ名」を選択(例:unityplugin>Java>com.ore.unityplugin)
 ・(AndroidTest)や(Test)と書かれていないもの(一番上)
・メニューの「File」>「New」>「JavaClass」を押す
・「Name」を設定(例:TestPlugin)
・「OK」を押す
・以下はトースト表示する簡単なサンプル

image.png

package com.ore.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();
            }
        });
    }
}

UnityPlayerでビルドエラーがでるので、unityLibrary-libsの[unity-classes.jar]を UnityPlugin-libsにコピーする。IDE右上の[SyncProject with Gradle]を押すとビルド成功します。
image.png
 ・aarのサイズは16K程度です。100kくらいある場合はunity-classes.jarも含んでおり、プラグイン利用時にUnityが持つJarと衝突します。

作成したPluginを使う

UnityProject/Asset/Plugins/Androidに作成したプラグイン *.aar を配置する。

#スクリプト

TestPlugin を作成して適当なGameObjectに配置する。UnityでButtonとTextを生成してTestPlugin と接続する。
最後にAndroid実機で動作確認をする。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestPlugin : MonoBehaviour
{
    [SerializeField] private Button _button = null;
    public Text m_text = null;

    private void Start()
    {
        _button.onClick.AddListener(() => OnButtonClick(_button));
        m_text.text = "start";
    }

    private void OnButtonClick(Button button)
    {
        m_text.text = "OnButtonClick_1";

        using (AndroidJavaClass javaClass = new AndroidJavaClass("com.ore.unityplugin.TestPlugin"))
        {
            Debug.Log("OnButtonClick");
            m_text.text = "OnButtonClick_2";
        
            javaClass.CallStatic("showToast", "Test");
        }
    }
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?