Kamerayı yapılandırma

Kamera yapılandırmaları, bir uygulamanın altındaki kamera sensörünün özelliklerini açıklar. Unity'de bu yapılandırmalara XRCameraConfiguration üzerinden erişilebilir.

Android platformunda ARCore, XRCameraConfiguration içinde ARCore'a özgü ek özellikleri kullanıma sunmak için XRCameraConfigurationExtensions sağlar. Bu özellikleri kullanarak uygulamanız için uygun kamera yapılandırmasını ayarlayabilirsiniz.

Genişletilmiş kamera yapılandırma özellikleri (Android)

Aşağıdaki genişletilmiş özellikler, Android platformunda ARCore tarafından desteklenmektedir.

Desteklenen kamera yapılandırmalarına erişme

Belirli bir cihazda desteklenen kamera yapılandırmalarına erişmek için ARCameraManager.GetConfigurations() adresini kullanın. Bu işlem, XRCameraConfiguration öğesinin birden çok örneğini içeren bir NativeArray döndürür. Her örnek; derinlik kullanımı, hedef yakalama kare hızı, çözünürlük ve doku boyutları gibi özellikleri belirten bağımsız bir kamera yapılandırmasıdır.

Uygulamanızın sahnesinde kamerayı yapılandırın

Uygulamanızın sahnesinde kamerayı yapılandırmak için aşağıdaki adımları uygulayın.

  1. Desteklenen XRCameraConfiguration öğelerinin listesini sorgulamak için ARCameraManager ile ARCameraManager.GetConfigurations() birlikte kullanın.

  2. Android için oluşturuyorsanız ARCore'a özel özellikler elde etmek için XRCameraConfigurationExtensions'teki işlevlerin herhangi bir kombinasyonunu kullanın.

  3. Mevcut yapılandırmayı ayarlamak için cameraManager.currentConfiguration simgesini kullanın.

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;
    }
}

Kamera yapılandırma filtreleri

Uygulamanızın ihtiyaçlarına göre filtreleme yaparak çalışma zamanında belirli bir cihazın mevcut kamera yapılandırmalarını daraltmak için ARCoreExtensionsCameraConfigFilter kullanabilirsiniz.

Kamerayla çekim kare hızını 30 FPS ile sınırlandırın

Uygulamanızın daha yüksek bir kamera kare hızına ihtiyacı yoksa bunu 30 FPS ile sınırlandırabilirsiniz. 60 FPS kamera kare hızını destekleyen cihazlarda ARCore, varsayılan olarak bu kare hızını destekleyen kamera yapılandırmasına öncelik verir. 60 FPS'yi destekleyen tüm kamera yapılandırmalarını filtrelemek için Target Camera Framerate değerinin Target 30FPS olarak ayarlandığından emin olun.

ARCore'un derinlik sensörünü kullanmasını engelle

Uygulamanız derinlik gerektirmiyorsa ARCore'un derinlik sensörünü kullanmasını engelleyebilirsiniz. ARCore ARCore, desteklenen derinlik sensörüne sahip cihazlarda derinlik sensörünü kullanan kamera yapılandırmasına öncelik verir. Derinlik sensörünü kullanan tüm kamera yapılandırmalarını filtrelemek için Depth Sensor Usage öğesinin Do Not Use olarak ayarlandığından emin olun.

Kamera yapılandırma filtrelerini kullan

Uygulamanızın kamera yapılandırmalarını filtrelemesini etkinleştirmek için aşağıdaki adımları uygulayın.

Yeni kamera yapılandırma filtresi oluşturmak için Assets > Create > XR > Camera Config Filter sayfasına gidin.

Filtrenizin kullanmasını istediğiniz yapılandırmaları seçin.

Filtreyi oluşturduktan sonra ARCoreExtensions bileşeninde kullanın.

Çalışma zamanında kamerayı yapılandır

Cihaz türü gibi faktörlere bağlı olarak çalışma zamanında kamerayı yapılandırmak için geri çağırma etkinliğini ARCoreExtensions.OnChooseXRCameraConfiguration kullanabilirsiniz.

// 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;
}