Android Studioによりネイティブプラグインを作成し、Unityに作成したネイティブプラグインを実装し、新規プロジェクトを作成して、Android携帯にネイティブプラグインとゲームオブジェクトを転送して実行します。このブログは「Unityで使用するAndroidのネイティブプラグインの作成(2024/01/06) – Unity編」に続きます。古いバージョンでのネイティブプラグインの作成は、「Unityで使用するAndroidのネイティブプラグインの作成」に示します。
- Android携帯:京セラ android one s2
- Androidバージョン:7.1.2
- Android開発環境:Android Studio Flamingo | 2022.2.1
- Unity: 2022.3.11f1 (64-bit)
Android Studio Flamingoのインストール
Android Studio Flamingoのインストールは、「Android Studio」からダウンロードしてインストールします。今回はコードネーム「 Flamingo」をインストールします。
インストール時に発生したエラーを次に示します。いずれのメッセージも統合開発環境 Eclipse 日本語化プロジェクト「Pleiades」に関連しています。
- エラーメッセージ「Pleiades 初期化時にエラーが発生しました」
- エラーメッセージ「JetBrains系IDEのサポートは廃止されました」
- エラーメッセージ「AOP起動トランスフォーマーの開始に失敗しました」
解決策:「Pleiades All in One ダウンロード」(スクロールして「 Pleiades プラグイン・ダウンロード」)からPleiadesをダウンロードして、インストールします。
解決策:どうも最新版のPleiadesはダメみたいで、古いバージョン(カットアンドトライ)をダウンロードします。
「Android Studio などの IntelliJ IDEA ベースの IDE の日本語化は Pleiades ではなく JetBrains 公式言語パックを使用してください。」とあります。
解決策:Android Studioを閉じ、フォルダ「C:\Users\ユーザー名\AppData\Roaming\Google\AndroidStudioバージョン」のファイル「studio64.exe.vmoptions」を、次のように「pleiades.jar」に関する記述を見つけコメントアウトして、無効化します。
# Custom VM options (Generated by Pleiades Installer) # See https://pleiades.io/pages/pleiades_jetbrains_manual.html #-Xms256m #-Xmx1280m #-javaagent:C:\Users\ne\AppData\Roaming\Google\AndroidStudio2021.1\jp.sourceforge.mergedoc.pleiades\pleiades.jar -Xverify:none #-javaagent:C:\Users\ne\AppData\Roaming\Google\AndroidStudio2022.2\jp.sourceforge.mergedoc.pleiades\pleiades.jar
Android Studioによるネイティブプラグインの作成
Android Studioにより次の手順でネイティブプラグイン「unitylibrary-release.aar」を作成します。
- Android Studioで「No Activity」により新規プロジェクト「UnityPlugin2401」を作成します。
- File メニューから「 New 」→ 「New Module」を選択し、開いたダイアログで「Android Library」を選択します
- ライブラリモジュール「unitylibrary」を作成します。
- File メニューから「Project Structure…」を選択します。
- 開いたダイアログの左メニュー「Modules」を選択して、最初に作られた「app」を削除します。
- 次のフォルダのUnityクラスライブラリ「classes.jar」を取得します。
- 次のように、作成したプロジェクトフォルダ内の「libs」にドラッグ&ドロップにより追加します。
- モジュールレベル「unitylibrary」のbuild.gradleにUnityクラスライブラリ「classes.jar」を次のように追加し、右上の「Sync Now」ボタンをクリックして、Gradleの変更を適用します。
- 次のようにJavaクラスを新規追加します。名称を「UnityPlugin」、パッケージ名を「com.tomosoft.unitylibrary」UnityPlugin2401\unitylibrary\src\main\java\com\tomosoft\unitylibraryとします。
- 作成した「UnityPlugin 」に次のコードを記述します。
- viewメニューから「Tool Windows」を選択して「Build Variants」をクリックします。
- 表示されたBuild Variants画面でReleaseにします。
- Buildメニューから「Make Module ‘UnityPlugin2401.unitylibrary.main’」をクリックし、作成したプラグインをAARファイルとしてビルドします。
- ビルドが完了すると、次のように「・・・/UnityPlugin/unitylibrary/build/outputs/aar」にAARファイル「unitylibrary-release.aar」が生成されます。
F:\Program Files\2018.4.26f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
「Unityで作成したゲームをAndroid携帯で実行(2024/01/06)」に従って、Android用にゲームビルドできる環境が構築されていないと、Unityクラスライブラリ「classes.jar」は存在しません。
compileOnly fileTree(dir: "libs", include: ["*.jar"])
モジュールレベル「unitylibrary」のbuild.gradleを次のようになります。
・・・ } dependencies { compileOnly fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.5.0' //implementation 'com.google.android.material:material:1.11.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
次のようなエラーが発生したときには、「implementation ‘com.google.android.material:material:1.5.0’」を追加して、「//implementation ‘com.google.android.material:material:1.11.0’」をコメントにすると消えます。
シーンに存在するオブジェクト「UnityTest」のメソッド「FromAndroid」にメッセージ「”UnityTest”+パラメータとして受けとった文字列」を送信します。
UnitySendMessage("GameObject名","関数名","引数");
メッセージを介して渡せるのは文字列だけなので、複雑な結果を渡したい場合にはシリアライズ/デシリアライズする必要があります。
package com.tomosoft.unitylibrary; import com.unity3d.player.UnityPlayer; public class UnityPlugin { public static String FromUnity(String str) { UnityPlayer.UnitySendMessage("UnityTest2401" , "FromAndroid" , ""); return( "UnityPlugin2401: " + str); } }