LoginSignup
6
4

More than 3 years have passed since last update.

[Unity]Androidネイティブプラグイン(Java言語)

Last updated at Posted at 2021-04-17

概要

Unity単体では使う事の出来ないAndroidの機能もAndroidプラグインを呼び出すことで使えるようになります。
この記事は、導入するための最小限のポイントをまとめたものです。詳しい解説は他の方の記事を参考にしてください(この記事の一番下にもリンクを貼っています)
この記事はAndroidStudio4.0.1を使用しています。

1) プロジェクト作成

AndroidStudioを起動してFile > New > New Projectと進みます
スクリーンショット (2219).png
テンプレート選択画面ではNo Activity > Nextと進みます
スクリーンショット (2220).png
Nameに適当な名前を入力してください(Package nameは自動入力されます)LanguageはJavaを選びます
スクリーンショット (2221).png

2) モジュール作成

File > New > New Moduleと進みます(New Moduleが押せない時はパソコンが処理してる最中なのでしばらく待ってみてください)
スクリーンショット (2222).png
Android Library > Nextと進みます
スクリーンショット (2223).png
設定を確認してFinishを押します
スクリーンショット (2224).png

3) appモジュールはいらないので削除します

File > Project Structure
スクリーンショット (2226).png
1)Modulesを選ぶと右の画面が切り替わります。
2)appが選択されているのを確認して『-』ボタンを押すとappの消去が決定されます
3)最後にOKを押します(OKを押さずにウィンドウを閉じると消去されないので注意してください)
スクリーンショット (2227).png

4) Unityクラスライブラリを追加

Unityのプログラムフォルダ内にあるUnityクラスライブラリを貰ってきます
スクリーンショットの様にProjectを選び
スクリーンショット (2231).png
libsを表示しておきます
スクリーンショット (2232).png
環境によって違いますがUnityのプログラムフォルダをたどった先にあるclasses.jarを先ほどのlibsフォルダへコピーします(ドラッグアンドドロップするとファイルの移動になってしまいます。一度別のフォルダにコピーしてからそのファイルをlibsへドラッグアンドドロップすると上手くいきます)
スクリーンショット (2228).png

5) モジュールレベルのbuild.gradleを修正する

スクリーンショットの様にフォルダをたどりbuild.gradleをダブルクリックすると右の方にコードが表示されます。
スクリーンショット (2233).png
コードを下にスクロールして

    implementation fileTree(dir: "libs", include: ["*.jar"])

この一行を

    compileOnly fileTree(dir: "libs", include: ["*.jar"])

と書き換えます。修正が終わったら右上のSync Nowを押します。成功するとSUCCESSFULと表示されるはずです。
スクリーンショット (2234).png

6) プラグイン用のコードを作成する

スクリーンショットの様にAndroidを選択します
スクリーンショット (2235).png
スクリーンショットの丸印のフォルダ上で右クリック > New > Java Class
スクリーンショット (2236).png
ポップアップが表示されるのでクラス名を入力します
スクリーンショット (2237).png
プラグインのコードを入力します
Unity側から呼ばれるメソッドがFromUnity()で、このメソッドからUnity側のFromAndroid()を呼ぶことになります

package com.example.mylibrary;

import com.unity3d.player.UnityPlayer;

public class PluginTest {
    public static String FromUnity()
    {
        UnityPlayer.UnitySendMessage("UnityTest" , "FromAndroid" , "メソッド呼び出し");
        return( "戻り値" );
    }
}

Build > Make Module
スクリーンショット (2239).png
プラグインが出力されたのでフォルダをたどって表示しておきます。
スクリーンショット (2240).png
Unityでフォルダを作ります。
Assets > Plugins > Android
作成したフォルダに先ほどの出力されたプラグインをドラッグアンドドロップします。
スクリーンショット (2241).png

UnityTest.csを新規作成してコードを記述します。

using UnityEngine;
using UnityEngine.UI;

public class UnityTest : MonoBehaviour {
    [SerializeField] Text txtMessage;
    [SerializeField] Button btnAndroid;

    void Start() {
        btnAndroid.onClick.AddListener(CallAndroidPlugin);
        txtMessage.text = "初期値";
    }

    /// <summary>
    /// ボタンが押されたらプラグインを呼ぶ
    /// </summary>
    public void CallAndroidPlugin() {
        using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.example.mylibrary.PluginTest")) {
            txtMessage.text += androidJavaClass.CallStatic<string>("FromUnity");
        }
    }

    /// <summary>
    /// プラグイン側からUnityを呼ぶ
    /// </summary>
    public void FromAndroid(string str) {
        txtMessage.text += str;
    }
}

uGUIでテキストとボタンを用意します
空のオブジェクトを作って先ほど作ったUnityTestをAddComponentしてください
スクリーンショット (2242).png

AndroidのスマフォをパソコンにUSB接続してBuild And Runします(うまく出来ない時はスマフォ側の設定を変更する必要があるかもしれません)
スクリーンショット (2243).png
スマフォ画面で実行結果を確認します。ボタンを押すたびにAndroidプラグインを介して処理が行われることが確認できます。(ボタンを押すたびにテキスト文字が増え続けます)

参考にさせていただいた記事

こちらの記事の方が詳しくわかりやすく書かれています。自分のつまずいた箇所とバージョンの差による表示の違いをまとめるために今回記事にしてみました。
Unity向けAndroidネイティブプラグインの作り方
https://gaprot.jp/2020/03/30/unity-android-native-plugin/
【Unity】Android Nativeプラグイン開発 最小構成でなるべくわかりやすくまとめた
https://ghoul-life.hatenablog.com/entry/2019/01/26/030622

追記

プラグイン側のUnitySendMessageの引数は
第一引数 プラグイン側から呼び出したい「Unityのクラス名」
第二引数 プラグイン側から呼び出したい「Unityのメソッド名」
第三引数 呼び出したメソッドに渡す引数

UnityPlayer.UnitySendMessage("UnityTest" , "FromAndroid" , "メソッド呼び出し");

Unity側のAndroidJavaClassの引数は
Java側のコードのpackageに指定されている部分 + クラス名
で記述します

AndroidJavaClass("com.example.mylibrary.PluginTest")
6
4
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
6
4