版本:Unity 6 (6000.0)
语言:英语
扩展默认 Unity 活动
指定 Android Player 命令行参数

创建自定义活动

要扩展默认 Unity 活动,您可以创建自己的自定义活动并将其设置为应用程序的入口点。执行此操作的过程如下

  1. 创建一个扩展 UnityPlayerActivity 类的新的活动。

    注意:如果您要使用 GameActivity 应用程序入口点创建新的活动,则需要扩展 UnityPlayerGameActivity 类。请确保您根据在 播放器设置允许您为 Unity 生成的最终游戏设置各种特定于播放器的选项。 更多信息
    词汇表 中查看
    中设置的应用程序入口点扩展正确的类。

  2. 创建一个 插件在 Unity 之外创建的一组代码,用于在 Unity 中创建功能。在 Unity 中可以使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。 更多信息
    词汇表 中查看
    将新的活动传递给最终的 Unity Android 应用程序。

  3. 覆盖 Android 应用清单 以将您的新 activity 设置为应用程序的入口点。

执行此操作后,您可以在活动中实现自定义行为来控制 Unity 和 Android 之间的交互。

创建新的活动

要创建新的活动

  1. Assets 文件夹中,创建一个新的 Java (.java) 或 Kotlin (.kt) 文件。

  2. 在新的文件中,创建一个扩展 UnityPlayerActivity 的类。

    注意:如果您使用的是 GameActivity 应用程序入口点,则需要创建一个扩展 UnityPlayerGameActivity 类的类。

  3. 在新类中,覆盖各种基本 Activity 方法以实现您希望活动具有的自定义行为。有关更多信息,请参阅 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) {
    // Calls UnityPlayerActivity.onCreate()
    super.onCreate(savedInstanceState);
    // Prints debug message to Logcat
    Log.d("OverrideActivity", "onCreate called!");
  }
  public void onBackPressed()
  {
    // Instead of calling UnityPlayerActivity.onBackPressed(), this example ignores the back button event
    // super.onBackPressed();
  }
}

使用 GameActivity 应用程序入口点的示例活动

以下代码示例展示了使用 GameActivity 应用程序入口点并覆盖多个函数的示例活动。

package com.company.product;
import com.unity3d.player.UnityPlayerGameActivity;
import android.os.Bundle;
import android.util.Log;

public class OverrideExample extends UnityPlayerGameActivity {
  protected void onCreate(Bundle savedInstanceState) {
    // Calls UnityPlayerGameActivity.onCreate()
    super.onCreate(savedInstanceState);
    // Prints debug message to Logcat
    Log.d("OverrideActivity", "onCreate called!");
  }
  public void onBackPressed()
  {
    // Instead of calling UnityPlayerGameActivity.onBackPressed(), this example ignores the back button event
    // super.onBackPressed();
  }
}

为活动创建插件

要将自定义活动用于 Unity Android 应用程序,您必须创建一个插件来包含活动。活动是用 Java 或 Kotlin 编写的,这意味着您必须使用以下类型的插件之一

如果您想为单个项目创建自定义活动,请使用 Java 和 Kotlin 源代码插件。要创建源代码插件,请将源代码文件直接放置在项目的 Assets 文件夹中。

如果您想在多个项目中重用活动或将其分发给其他人,请使用 Android 存档 (AAR) 或 JAR 插件。管理一个 AAR 或 JAR 插件文件更容易在多个项目中交付功能。

在您开发插件时使用 Android 库项目,然后在完成实现、想要在多个项目中使用它或将其分发给其他人时将其编译成 Android 存档插件。

创建插件后,将活动文件添加到其中。

将新的活动设置为应用程序入口点

创建活动并将其添加到插件后,您可以将其设置为应用程序的入口点。为此,修改 Android 清单 并将 activity 元素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:theme="@style/UnityThemeSelector"
             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>

以下 Android 清单示例展示了如何为使用 GameActivity 应用程序入口点的自定义活动执行此操作

<?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:theme="@style/BaseUnityGameActivityTheme"
             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>
        <meta-data android:name="android.app.lib_name" android:value="game" />
    </activity>
  </application>
</manifest>
扩展默认 Unity 活动
指定 Android Player 命令行参数