Version: 2022.2
言語: 日本語
Unity のデフォルトのアクティビティを拡張する
Specify Unity start-up arguments

カスタムアクティビティの作成

Unity のデフォルトのアクティビティを拡張するには、独自のカスタムアクティビティを作成し、それをアプリケーションのエントリーポイントに設定します。そのためのプロセスは以下の通りです。

  1. UnityPlayerActivity クラスを継承した新しいアクティビティを作成します。
  2. 新しいアクティビティを最終的な Unity Android アプリケーションに配信するプラグインを作成します。
  3. Android アプリマニフェスト をオーバーライドして、新しい activity をアプリケーションのエントリーポイントとして設定します。

この後、アクティビティにカスタムビヘイビアを実装して、Unity と Android の間の相互作用を制御できます。

新しいアクティビティの作成

新しいアクティビティを作成する手順は以下のとおりです。

  1. Assets フォルダーに、新しい Java (.java) または Kotlin (.kt) ファイルを作成します。
  2. 新しいファイルでは、UnityPlayerActivity を継承するクラスを作成します。
  3. 新しいクラスでは、アクティビティに持たせたいカスタム動作を実装するために、さまざまな基本アクティビティメソッドをオーバーライドします。詳細については、Android の Activity ドキュメントを参照してください。

スクリプトサンプル

次のコードサンプルは、複数の関数をオーバーライドするアクティビティの例を示しています。

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() を呼び出す代わりに、この例はバックボタンのイベントを無視します
    // super.onBackPressed();
  }
}

アクティビティのプラグインを作成

Unity Android アプリケーションのカスタムアクティビティを使用するには、アクティビティを含むプラグインを作成する必要があります。アクティビティは Java または Kotlin で記述されているため、次のいずれかのタイプのプラグインを使用する必要があります。

1 つのプロジェクトにカスタムアクティビティを作成する場合は、Java と Kotlin のソースプラグインを使用します。ソースプラグインを作成するには、プロジェクトの Assets フォルダーにソースファイルを直接配置します。

アクティビティを複数のプロジェクトで再利用したり、他の人に配布したい場合は、Android Archive (AAR) または JAR プラグインを使用してください。1 つの AAR または JAR プラグインファイルを管理することで、複数のプロジェクトに機能を提供しやすくなります。

プラグインを開発している間は Android Library プロジェクトを使用し、実装が完了し複数のプロジェクトで使用するとき、または他の人に配布するときは Android Archive プラグインにコンパイルします。

プラグインを作成したら、アクティビティファイルを加えます。

新しいアクティビティをアプリケーションのエントリーポイントに設定

アクティビティを作成してプラグインに加えたら、そのアクティビティをアプリケーションのエントリーポイントとして設定します。これを行うには、Android マニフェストをオーバーライド し、アクティビティ要素name 属性をカスタムアクティビティのクラス名に設定します。

以下の Android マニフェストの例は、この方法を示しています:

<?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>
Unity のデフォルトのアクティビティを拡張する
Specify Unity start-up arguments