Указать аргументы командной строки Android Player
Настраиваемое действие Unity можно расширить, чтобы передавать аргументы командной строки при запуске проигрывателя Android. Сведения о доступных аргументах командной строки см. в разделе Аргументы командной строки.
Чтобы указать аргументы командной строки запуска в настраиваемой операции:
Создайте пользовательскую операцию и установите ее в качестве точки входа приложения.
В пользовательской activity переопределите
String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine)метод.-
В методе соедините аргумент
cmdLineс собственными аргументами запуска, а затем возвратите результат.Важно: Аргумент
cmdLineможет быть пустой строкой или иметь значение null. Убедитесь, что ваш код обрабатывает оба варианта.
В следующем примере показано, как указать аргументы запуска для выбора графики 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() {
// Use Vulkan on Google Pixel devices
if (Build.MANUFACTURER.equals("Google") && Build.MODEL.startsWith("Pixel"))
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
return cmdLine; // let Unity pick the Graphics API based on PlayerSettings
}
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
}
В следующем примере показано, как передать настраиваемые параметры запуска из основного приложения Android в приложение Unity:
package com.company.product;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.content.Intent;
public class CustomParameterExample extends UnityPlayerActivity {
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)
{
// Get custom parameters passed from the native Android application
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null && extras.containsKey("startLevel")) {
int level = extras.getInt("startLevel");
cmdLine = appendCommandLineArgument(cmdLine, "-level " + level);
}
return cmdLine;
}
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
}
Дополнительные способы указания аргументов командной строки
Помимо настраиваемой операции аргументы командной строки можно задать следующим образом:
- В Android Studio: Если вы открываете свой проект в Android Studio, вы можете передавать аргументы командной строки запуска Unity через Launch Flags в диалоге Run/Debug Configurations.
- Через Android Debug Bridge (adb): Вы можете передавать аргументы командной строки, запуская приложение Android через adb, используя следующий код.
adb shell am start -n "<package_name>/<activity_name>" -e unity \"<command_line_arguments>\"
Используйте следующий пример кода для передачи аргумента командной строки -systemallocator вашему приложению.
adb shell am start -n "com.Company.MyGame/com.unity3d.player.UnityPlayerActivity" -e unity \"-systemallocator\"
Используйте следующий пример кода для передачи аргумента командной строки -platform-android-jobworker-affinity со значением little для запуска потоков рабочего задания Unity на малых ядрах. Дополнительные сведения см. в Android настройка потока.
adb shell am start -a android.intent.action.MAIN -n "com.Company.MyGame/com.unity3d.player.UnityPlayerActivity" -e unity \"-platform-android-jobworker-affinity little\"