Konfiguruję kamerę

Konfiguracje kamer opisują właściwości czujnika aparatu, który działa w aplikacji. W Unity te konfiguracje są dostępne w XRCameraConfiguration.

Na platformie Androida ARCore udostępnia XRCameraConfigurationExtensions, aby udostępniać dodatkowe właściwości ARCore w XRCameraConfiguration. Dzięki tym właściwościom możesz skonfigurować odpowiednią konfigurację kamery pod kątem aplikacji.

Właściwości rozszerzonej konfiguracji aparatu (Android)

ARCore na platformie Androida obsługuje podane niżej właściwości rozszerzone.

Dostęp do obsługiwanych konfiguracji kamer

Otwórz menu ARCameraManager.GetConfigurations(), aby uzyskać dostęp do konfiguracji kamer obsługiwanych w przypadku danego urządzenia. Zwrócona zostanie NativeArray, która zawiera wiele wystąpień obiektu XRCameraConfiguration. Każda instancja to osobna konfiguracja kamery, która określa takie właściwości jak zastosowanie głębi, docelowa liczba klatek, rozdzielczość i wymiary tekstur.

Skonfiguruj kamerę w scenie aplikacji

Aby skonfigurować kamerę w scenie aplikacji, wykonaj te czynności.

  1. Użyj operatora ARCameraManager z ARCameraManager.GetConfigurations(), aby wysłać zapytanie o listę obsługiwanych obiektów XRCameraConfiguration.

  2. Jeśli tworzysz treści na Androida, użyj dowolnej kombinacji funkcji w XRCameraConfigurationExtensions, aby uzyskać właściwości specyficzne dla ARCore.

  3. Użyj cameraManager.currentConfiguration, aby ustawić bieżącą konfigurację.

using UnityEngine.XR.ARFoundation;


// Adds XRCameraConfigurationExtensions extension methods to XRCameraConfiguration.
// This is for the Android platform only.
using Google.XR.ARCoreExtensions;

// Must be set in the editor.
public ARCameraManager cameraManager;

// Use ARCameraManager to obtain the camera configurations.
using (NativeArray<XRCameraConfiguration> configurations = cameraManager.GetConfigurations(Allocator.Temp))
{
    if (!configurations.IsCreated || (configurations.Length <= 0))
    {
        return;
    }

    // Iterate through the list of returned configs to locate the config you want.
    var desiredConfig = configurations[0];
    for (int i = 1; i < configurations.Length; ++i)
    {
        // Choose a config for a given camera that uses the maximum
        // target FPS and texture dimension. If supported, this config also enables
        // the depth sensor.
        if (configurations[i].GetFPSRange().y > desiredConfig.GetFPSRange().y &&
            configurations[i].GetTextureDimensions().x > desiredConfig.GetTextureDimensions().x &&
            configurations[i].GetTextureDimensions().y > desiredConfig.GetTextureDimensions().y &&
            configurations[i].CameraConfigDepthSensorUsage() == CameraConfigDepthSensorUsage.RequireAndUse)
        {
            desiredConfig = configurations[i];
        }
    }

    // Set the configuration you want. If it succeeds, the session
    // automatically pauses and resumes to apply the new configuration.
    // If it fails, cameraManager.currentConfiguration throws an exception.
    if (desiredConfig != cameraManager.currentConfiguration)
    {
        cameraManager.currentConfiguration = desiredConfig;
    }
}

Filtry konfiguracji aparatu

Możesz użyć narzędzia ARCoreExtensionsCameraConfigFilter, aby zawęzić dostępne konfiguracje kamer dla danego urządzenia w czasie działania przez filtrowanie odpowiednio do potrzeb aplikacji.

Ogranicz liczbę klatek na nagrywanie z kamery do 30 kl./s

Jeśli Twoja aplikacja nie wymaga szybszej liczby klatek, możesz ją ograniczyć do 30 kl./s. Na urządzeniach, które obsługują taką liczbę klatek, ARCore priorytetowo wybiera konfiguracje kamer, które domyślnie obsługują tę liczbę klatek. Aby odfiltrować wszystkie konfiguracje kamer obsługujące 60 FPS, sprawdź, czy atrybut Target Camera Framerate ma wartość Target 30FPS.

Nie zezwalaj ARCore na korzystanie z czujnika głębi

Jeśli Twoja aplikacja nie wymaga głębi, możesz uniemożliwić ARCore korzystanie z czujnika głębi. Na urządzeniach z obsługiwanym czujnikiem głębokości ARCore ARCore nadaje priorytet konfiguracjam aparatów, które korzystają z czujnika głębokości. Aby odfiltrować wszystkie konfiguracje kamery korzystające z czujnika głębi, upewnij się, że ustawienie Depth Sensor Usage ma wartość Do Not Use.

Użyj filtrów konfiguracji aparatu

Aby włączyć w aplikacji filtrowanie konfiguracji aparatu, wykonaj te czynności.

Otwórz Assets > Create > XR > Camera Config Filter, aby utworzyć nowy filtr konfiguracji aparatu.

Wybierz konfiguracje, których ma używać filtr.

Po utworzeniu filtra użyj go w komponencie ARCoreExtensions.

Skonfiguruj kamerę podczas działania

Za pomocą zdarzenia wywołania zwrotnego ARCoreExtensions.OnChooseXRCameraConfiguration możesz skonfigurować kamerę w czasie działania zależnie od takich czynników jak typ urządzenia.

// Unity's Awake() method
public void Awake()
{
    …
    // If the return value is not a valid index (ex. the value if -1),
    // then no camera configuration will be set. If no previous selection exists, 
    // the ARCore session will use the previously selected camera configuration 
    // or a default configuration.
    arcoreExtensions.OnChooseXRCameraConfiguration = SelectCameraConfiguration;
    …
}

// A custom camera configuration selection function
int SelectCameraConfiguration(List<XRCameraConfiguration> supportedConfigurations)
{
    int index = 0;

    // Use custom logic here to choose the desired configuration from supportedConfigurations.

    return index;
}