Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Konfiguracja aparatu

Konfiguracje kamer opisują właściwości podstawowego czujnika aparatu aplikacji. W Unity te konfiguracje są dostępne za pośrednictwem XRCameraConfiguration .

Na platformie Android ARCore udostępnia XRCameraConfigurationExtensions aby uwidocznić dodatkowe właściwości specyficzne dla XRCameraConfiguration w XRCameraConfiguration . Możesz użyć tych właściwości, aby ustawić odpowiednią konfigurację kamery dla swojej aplikacji.

Rozszerzone właściwości konfiguracji kamery (Android)

Następujące rozszerzone właściwości są obsługiwane przez ARCore na platformie Android.

Uzyskaj dostęp do obsługiwanych konfiguracji kamer

Użyj ARCameraManager.GetConfigurations() aby uzyskać dostęp do obsługiwanych konfiguracji kamer dla danego urządzenia. Zwraca NativeArray zawierający wiele wystąpień XRCameraConfiguration . Każde wystąpienie to indywidualna konfiguracja kamery określająca właściwości, takie jak użycie głębi, docelowa liczba klatek na sekundę, rozdzielczość i wymiary tekstury.

Skonfiguruj kamerę w scenie aplikacji

Wykonaj poniższe czynności, aby skonfigurować kamerę w scenie aplikacji.

  1. Użyj ARCameraManager z ARCameraManager.GetConfigurations() aby zapytać o listę obsługiwanych XRCameraConfiguration .

  2. Jeśli tworzysz dla systemu Android, 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ć ARCoreExtensionsCameraConfigFilter aby zawęzić dostępne konfiguracje kamer dla danego urządzenia w czasie wykonywania, filtrując je na podstawie potrzeb aplikacji.

Ogranicz liczbę klatek na sekundę do 30 klatek na sekundę

Jeśli Twoja aplikacja nie potrzebuje większej liczby klatek na sekundę aparatu, możesz ograniczyć ją do 30 kl./s. Na urządzeniach obsługujących częstotliwość odświeżania 60 klatek na sekundę, ARCore nada priorytet konfiguracjom kamer, które domyślnie obsługują tę liczbę klatek na sekundę. Aby odfiltrować wszystkie konfiguracje kamer obsługujące 60 kl./s, upewnij się, że docelowa liczba klatek na sekundę jest ustawiona na Docelowa liczba kl./s .

Zapobiegaj używaniu przez ARCore czujnika głębokości

Jeśli Twoja aplikacja nie wymaga funkcji Depth, możesz uniemożliwić ARCore korzystanie z czujnika głębokości. Na urządzeniach, które mają obsługiwany czujnik głębokości, ARCore ARCore nadaje priorytet konfiguracjom kamer, które używają czujnika głębokości. Aby odfiltrować wszystkie konfiguracje kamer, które używają czujnika głębokości, upewnij się, że opcja Użycie czujnika głębokości jest ustawiona na Nie używaj .

Użyj filtrów konfiguracji kamery

Wykonaj poniższe czynności, aby umożliwić aplikacji filtrowanie konfiguracji kamer.

Przejdź do Zasoby > Utwórz > Rozszerzenia ARCore > Filtr konfiguracji kamery, aby utworzyć nowy filtr konfiguracji kamery.

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

Po utworzeniu filtru użyj go w komponencie ARCoreExtensions .

Skonfiguruj kamerę podczas działania

Możesz użyć zdarzenia wywołania zwrotnego ARCoreExtensions.OnChooseXRCameraConfiguration aby skonfigurować kamerę w czasie wykonywania, na podstawie 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;
}