Unity 6.3
0 онлайн 38 гостей 3 в системе
Вход

Указать аргументы командной строки Android Player

Настраиваемое действие Unity можно расширить, чтобы передавать аргументы командной строки при запуске проигрывателя Android. Сведения о доступных аргументах командной строки см. в разделе Аргументы командной строки.

Чтобы указать аргументы командной строки запуска в настраиваемой операции:

  1. Создайте пользовательскую операцию и установите ее в качестве точки входа приложения.

  2. В пользовательской activity переопределите String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine) метод.

  3. В методе соедините аргумент 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\"