Uzamsal özellikler cihazlar arasında farklılık gösterebilir ve kullanıcılar uygulamanızla veya sistemle etkileşimde bulundukça değişebilir. Hatta uygulamanız tarafından da değiştirilebilirler. Örneğin, Ev Alanı'na veya Tam Ekran Alanı'na geçiş yapılabilir. Sorun yaşamamak için uygulamanızın, mevcut ortamda hangi API'lerin desteklendiğini belirlemek üzere uzamsal özellikleri kontrol etmesi gerekir.
XR için Jetpack Compose'u kullanarak uzamsal özellikleri kontrol etme
XR için Jetpack Compose, uzamsal özellikleri kontrol etmek amacıyla bir CompositionLocal oluşturur. Üç boyutlu kullanıcı arayüzü, üç boyutlu ses, ortamlar, geçiş veya 3D içeriğin etkin olup olmadığını kontrol etmek için bunu kullanın.
Aşağıdaki uzamsal özelliklerin şu anda kullanılabilir olup olmadığını kontrol etmek için LocalSpatialCapabilities.current kullanabilirsiniz:
isSpatialUiEnabled: Uygulamanın uzamsal kullanıcı arayüzü öğeleri (ör.SpatialPanel) oluşturup oluşturamayacağını belirtir.isContent3dEnabled: Uygulamanın 3D nesneler oluşturup oluşturamayacağını belirtir.isAppEnvironmentEnabled: Uygulamanın ortamı ayarlayıp ayarlayamayacağını gösterir.isPassthroughControlEnabled: Uygulamanın, geçiş durumunu kontrol edip edemeyeceğini belirtir.isSpatialAudioEnabled: Uygulamanın üç boyutlu ses kullanıp kullanamayacağını belirtir.
Aşağıdaki örnekte, üç boyutlu kullanıcı arayüzünün etkin olup olmadığının nasıl kontrol edileceği gösterilmektedir:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
SceneCore kullanarak uzamsal özellikleri kontrol etme
SceneCore kitaplığını kullanırken bir oturum oluşturmanız gerekir. Oturum oluşturulduktan sonra, oturumun scene öğesinden spatialCapabilities kullanarak şu anda hangi uzamsal özelliklerin kullanılabildiğini sorgulayın.
SPATIAL_3D_CONTENT: Etkinlik, 3D içerikler oluşturabilir.APP_ENVIRONMENT: Etkinlik kendi ortamını ayarlayabilir.EMBED_ACTIVITY: Etkinlik, başka bir etkinliği mekansal olarak yerleştirebilir.PASSTHROUGH_CONTROL: Etkinlik, geçişi etkinleştirebilir veya devre dışı bırakabilir.SPATIAL_AUDIO: Etkinlikte üç boyutlu ses kullanılabilir.SPATIAL_UI: Etkinlik, kendisini uzamsallaştırabilir (ör. uzamsal panel ekleme).
Ayrıca, uzamsal özellikler değiştiğinde sizi bilgilendiren bir geri çağırma işlevine (addSpatialCapabilitiesChangedListener) abone olmayı da seçebilirsiniz.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
Cihazın ekran özelliklerini kontrol etmek için karışım modunu kullanma
Android XR'da, XR kulaklıkları ve kablolu XR gözlükleri, özellikle ekran türleri açısından farklı donanım özelliklerine sahiptir. Görünürlüğü en üst düzeye çıkarmak için uygulamanızın kullanıcı arayüzünün ve oluşturulan nesnelerin renklerini uyarlamanız gerekebilir. Bu durum, cihazın kullandığı ekran türünden ve tercih edilen karışım modundan etkilenebilir. DisplayBlendMode API'si, oluşturma için cihazın karışım modu özelliğini sağlar. Sanal içeriğin gerçek dünyaya nasıl ekleneceğini belirlemek için bu API'yi kullanın.
Dikkat etmeniz gereken karışım modu türlerinden bazıları şunlardır:
ADDITIVE: Sanal içerik, kırmızı, yeşil ve mavi bileşenlerin her birinin piksel değerleri eklenerek gerçek dünyaya eklenir. Alfa yoksayılır ve siyah pikseller şeffaf görünür.ALPHA_BLEND: Sanal içerik, alfa bileşenine göre piksel değerleri alfa harmanlanarak gerçek dünyaya eklenir.NO_DISPLAY: Karıştırma, cihazda desteklenmiyor.
Kullanılan karışım modunun türünü kontrol etmek ve gerekli ayarlamaları yapmak için Jetpack XR Çalışma Zamanı kitaplığındaki XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() öğesini kullanın.
Aşağıdaki kaynakları da incelemenizi öneririz:
- Bir oturum oluşturun
- HSM ve FSM arasında geçiş
- Uygulamanıza uzamsal ortamlar ekleme
- Uygulamanıza 3D modeller ekleme