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.
- Derinlik sensörü kullanımı
- Hedef kamerayla çekim kare hızı için aralık
- GPU ile erişilebilir harici dokunun boyutları
- Kamera yönü
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.
Desteklenen
XRCameraConfiguration
öğelerinin listesini sorgulamak içinARCameraManager
ileARCameraManager.GetConfigurations()
birlikte kullanın.Android için oluşturuyorsanız ARCore'a özel özellikler elde etmek için
XRCameraConfigurationExtensions
'teki işlevlerin herhangi bir kombinasyonunu kullanın.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;
}