このページの各セクション
Unity Android アプリケーションの開発に当たって、プラグインを使って標準の UnityPlayerActivity
クラス (Android の Unity Player の基本の Java クラスで、 Unity iOS の AppController.mm と似ています) を拡張することができます。Android OS と Unity Android アプリケーション間の基本的なインタラクションは全て、アプリケーションによるオーバーライドが可能です。
デフォルトの Activity をオーバーライドするには以下を行います。
UnityPlayerActivity
(Android ドキュメントの Activity を参照) から派生する新しい Activity
を作成します。Activity
がアプリケーションのエントリーポイントとして使用されるように Android Manifest を修正してください。これを実現する最も簡単な方法は、Unity からプロジェクトをエクスポートし、Android Studioで UnityPlayerActivity
クラスに必要な変更を加えることです。または、新しいクラスを作成し、それを拡張し、unityLibrary プロジェクトの AndroidManifest.xml
を修正し、 UnityPlayerActivity
をそのクラスで置き換えます。
新しい Activity でプラグインを作成し、それをプロジェクトに追加するには、以下の手順を実行してください。 1. UnityPlayerActivity のファイルを拡張します。これは、Unity からプロジェクトをエクスポートした後、Android Studio で行うのがベストです。いくつかのオプションがあります。 * その Activity クラスを含む .java または .kt ファイルを、Unity プロジェクトに入れます。 * そのクラスを含む Java ライブラリを作成し、それをコンパイルしてできた .jar ファイルを Unity プロジェクトに加えます。 * そのクラスを含む Android ライブラリを作成します。このライブラリは、(.androidlib の拡張子を持つように名前を付けて) ソースコードによって Unity プロジェクトに配置することも、コンパイルして作成された .aar を Unity プロジェクトに入れることもできます。
新しい Activity
を持つプラグインを作成してプロジェクトに追加するには、以下の手順を実行します。
UnityPlayerActivity ファイルを拡張します。Unity からプロジェクトをエクスポートした後、Android Studio で行うのが一番良い方法です。その際、以下のようなオプションがあります。
macOS:
/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/src/com/unity3d/player
Windows
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player
Android マニフェストを 1 つ新規作成し、この新しい
Activity
のエントリーポイントとして設定します。AndroidManifest.xml
ファイルをプロジェクトの Assets/Plugins/Android
フォルダーに配置してください。
UnityPlayerActivity
を拡張すると、String UnityPlayerActivity.updateUnityCommandLineArguments
(String cmdLine) をオーバーライドして、Unity に起動時の引数を渡すことができます。
UnityPlayerActivity
は、起動時にこのメソッドを呼び出します。このメソッドは、現在のコマンドライン引数 (NULL または空) を受け入れ、Unity に渡すコマンドライン引数の新しい文字列を返します。
Unity のコマンドラインインターフェースの概要については、コマンドライン引数 を参照してください。
次の例は、現在のデバイスに基づいてグラフィックス API を選択するために、これを使用する方法を示しています。
package com.company.product;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.os.Build;
public class OverrideExample extends UnityPlayerActivity {
private boolean preferVulkan() {
// Google Pixel デバイスで Vulkan を使用
if (Build.MANUFACTURER.equals("Google") && Build.MODEL.startsWith("Pixel"))
return true;
else
return false;
}
private boolean preferES2() {
// Android 5.1 以前を使うデバイスで OpenGL ES 2.0 を使用
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1)
return true;
else
return false;
}
private String appendCommandLineArgument(String cmdLine, String arg) {
if (arg == null || arg.isEmpty())
return cmdLine;
else if (cmdLine == null || cmdLine.isEmpty())
return arg;
else
return cmdLine + " " + arg;
}
@Override protected String updateUnityCommandLineArguments(String cmdLine)
{
if (preferVulkan())
return appendCommandLineArgument(cmdLine, "-force-vulkan");
else if (preferES2())
return appendCommandLineArgument(cmdLine, "-force-gles20");
else
return cmdLine; // Unity に Player 設定に基づくグラフィックス API を選択させます
}
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
}
以下は、UnityPlayerActivity
ファイルの例です。
OverrideExample.java:
package com.company.product;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.util.Log;
public class OverrideExample extends UnityPlayerActivity {
protected void onCreate(Bundle savedInstanceState) {
// UnityPlayerActivity.onCreate() を呼び出す
super.onCreate(savedInstanceState);
// logcat にデバッグメッセージをプリントする
Log.d("OverrideActivity", "onCreate called!");
}
public void onBackPressed()
{
// UnityPlayerActivity.onBackPressed() を呼び出す代わりに、Back ボタンイベントを無視する
// super.onBackPressed();
}
}
対応する 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="com.YourPackage.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>
新しい Activity でプラグインを作成し、それをプロジェクトに追加するには、以下の手順を実行してください。