強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Unity 2018.2 から Unity プロジェクト内の .java ファイルがビルドされる機能が追加

Unity 2018.2 から Unity プロジェクト内の .java ファイルがビルドされる機能が追加されました。

What's new in Unity 2018.2 - Unity
https://unity3d.com/jp/unity/whats-new/unity-2018.2.0

機能としてはこの辺りの事が .aar や .jar を事前に作成する事無く、 .java ファイルを置く事で実装可能になりました。

UnityPlayerActivity Java コードの拡張 - Unity マニュアル
https://docs.unity3d.com/ja/2018.2/Manual/AndroidUnityPlayerActivity.html

Assets/Plugins/Android フォルダの下に .java ファイルと AndroidManifest.xml を置くだけでOKです。

コードの例

OverrideExample.java

package com.example.javacode;
import com.unity3d.player.UnityPlayerActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;

public class OverrideExample extends UnityPlayerActivity {
  protected void onCreate(Bundle savedInstanceState) {
    // UnityPlayerActivity.onCreate() を呼び出す
    super.onCreate(savedInstanceState);
    //Log.d("OverrideActivity", "onCreate called!");
    
    // 「Java Code」と記述されたダイアログを表示する
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Java code")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
        });
    builder.show();
  }
  public void onBackPressed()
  {
    // UnityPlayerActivity.onBackPressed() を呼び出す代わりに、Back ボタンイベントを無視する
    // super.onBackPressed();
  }
}

※ Unity プロジェクトの Package Name は com.example.javacode を設定。それが1行目に書かれています。このコードの1行目は実際に使用している Package Name に置き換えて使って下さい。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.product">
  <application android:icon="@drawable/app_icon" android:label="@string/app_name">
    <activity android:name=".OverrideExample"
             android:label="@string/app_name"
             android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  </application>
</manifest>

実際に使ってみたサンプルをこちらに置きましたので参照下さい。アプリを起動すると「Java code」と記述されたダイアログが表示されるサンプルです。

関連情報

[Unity]Unity v2018.2 で java ファイルがサポートされたらしいよ! https://anz-note.ghost.io/2018/07/12/1531331781/