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.
ARCore, Android platformunda XRCameraConfiguration
içindeki ARCore'a özgü ek özellikleri kullanıma sunmak için XRCameraConfigurationExtensions
hizmetini sunar. Uygulamanız için uygun kamera yapılandırmasını ayarlamak üzere bu özellikleri kullanabilirsiniz.
Genişletilmiş kamera yapılandırma özellikleri (Android)
Aşağıdaki genişletilmiş özellikler, Android platformunda ARCore tarafından desteklenir.
- Derinlik sensörü kullanımı
- Hedef kamerayla yakalama kare hızı aralığı
- GPU'ya erişilebilen 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()
düğmesini 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ırma
Uygulamanızın sahnesinde kamerayı yapılandırmak için aşağıdaki adımları uygulayın.
Desteklenen
XRCameraConfiguration
'ların listesini sorgulamak içinARCameraManager.GetConfigurations()
ileARCameraManager
kullanın.Android için uygulama geliştiriyorsanız ARCore'a özgü özellikleri almak için
XRCameraConfigurationExtensions
bölümündeki 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ırması filtreleri
Uygulamanızın ihtiyaçlarına göre filtreleyerek belirli bir cihaz için çalışma zamanında kullanılabilen kamera yapılandırmalarını daraltmak üzere ARCoreExtensionsCameraConfigFilter
öğesini kullanabilirsiniz.
Kamera çekimi kare hızını 30 FPS ile sınırlama
Uygulamanız daha hızlı bir kamera kare hızına ihtiyaç duymuyorsa bunu 30 FPS ile sınırlayabilirsiniz. 60 FPS kamera kare hızını destekleyen cihazlarda ARCore, varsayılan olarak bu kare hızını destekleyen kamera yapılandırmaları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ı engelleme
Uygulamanız derinlik gerektirmiyorsa ARCore'un derinlik sensörünü kullanmasını engelleyebilirsiniz. Desteklenen derinlik sensörüne sahip cihazlarda ARCore, derinlik sensörünü kullanan kamera yapılandırmalarına öncelik verir. Derinlik sensörünü kullanan tüm kamera yapılandırmalarını filtrelemek için Depth Sensor Usage değerinin Do Not Use olarak ayarlandığından emin olun.
Kamera yapılandırma filtrelerini kullanma
Uygulamanızın kamera yapılandırmalarını filtrelemesini sağlamak için aşağıdaki adımları uygulayın.
Yeni bir kamera yapılandırması filtresi oluşturmak için Assets > Create > XR > Camera Config Filter bölümüne gidin.
Filtrenizin kullanmasını istediğiniz yapılandırmaları seçin.
Filtreyi oluşturduktan sonra bir ARCoreExtensions bileşeninde kullanın.
Çalışma sırasında kamerayı yapılandırma
Kamerayı çalışma zamanında cihaz türü gibi faktörlere göre 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;
}