Uzamsal özellikler cihazlara göre değişebilir ve kullanıcılar uygulamanızla veya sistemle etkileşimde bulundukça değişebilir. Bu ayarlar, uygulamanız tarafından da değiştirilebilir. Örneğin, Ana Sayfa Alanı veya Tam Ekran Alanı'na geçiş yapabilirsiniz. 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 kullanarak uzamsal özellikleri kontrol etme
XR için Jetpack Compose, uzamsal özellikleri kontrol etmek için bir Composition Local oluşturur. Üç boyutlu kullanıcı arayüzü, üç boyutlu ses, ortamlar, passthrough veya 3D içeriklerin etkin olup olmadığını kontrol etmek için bu ayarı kullanın.
Aşağıdaki mekansal özelliklerin şu anda kullanılıp kullanılamadığını kontrol etmek için LocalSpatialCapabilities.current simgesini kullanabilirsiniz:
isSpatialUiEnabled: Uygulamanın,SpatialPanelgibi uzamsal kullanıcı arayüzü öğeleri oluşturup oluşturamayacağını gösterir.isContent3dEnabled: Uygulamanın 3D nesneler oluşturup oluşturamayacağını gösterir.isAppEnvironmentEnabled: Uygulamanın ortamı ayarlayıp ayarlayamayacağını belirtir.isPassthroughControlEnabled: Uygulamanın geçiş durumunu kontrol edip edemeyeceğini belirtir.isSpatialAudioEnabled: Uygulamanın uzamsal ses kullanıp kullanamayacağını gösterir.
Aşağıdaki örnekte, uzamsal kullanıcı arayüzünün etkin olup olmadığını kontrol etme adımları gösterilmektedir:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
SceneCore kullanarak mekansal özellikleri kontrol etme
SceneCore kitaplığını kullanırken bir oturum oluşturmanız gerekir. Oturum oluşturulduktan sonra, oturumun spatialCapabilities bölümünden scene simgesini kullanarak hangi uzamsal özelliklerin kullanılabildiğini sorgulayın.
SPATIAL_3D_CONTENT: Etkinlikte 3D içerikler oluşturulabilir.APP_ENVIRONMENT: Etkinlik kendi ortamını ayarlayabilir.EMBED_ACTIVITY: Etkinlik, başka bir etkinliği uzamsal olarak yerleştirebilir.PASSTHROUGH_CONTROL: Etkinlik, geçişi etkinleştirebilir veya devre dışı bırakabilir.SPATIAL_AUDIO: Etkinlikte uzamsal ses kullanılabilir.SPATIAL_UI: Etkinlik, kendisini uzamsallaştırabilir (ör. uzamsal panel ekleme).
Ayrıca, mekansal özellikler değiştiğinde sizi bilgilendiren bir geri arama aboneliği de seçebilirsiniz.
addSpatialCapabilitiesChangedListener
// 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ıştırma modunu kullanma
Android XR'da XR kulaklıkları ve kablolu XR gözlükleri, özellikle ekran türüyle ilgili olarak 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, ekran türünden ve cihazın kullandığı tercih edilen karıştırma modundan etkilenebilir. DisplayBlendMode API, oluşturma için cihazın karıştırma modu özelliğini sağlar. Sanal içeriğin gerçek dünyaya nasıl eklendiğini belirlemek için bu API'yi kullanın.
Dikkat etmeniz gereken bazı karıştırma modu türleri şunlardır:
ADDITIVE: Kırmızı, yeşil ve mavi bileşenlerin her birinin piksel değerleri eklenerek sanal içerik 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 karıştırması yapılarak gerçek dünyaya eklenir.NO_DISPLAY: Karıştırma, cihazda desteklenmiyor.
Hangi tür harmanlama modunun kullanıldığını kontrol etmek ve gerektiğinde ayarlamalar yapmak için Jetpack XR Runtime kitaplığındaki XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() öğesini kullanın.
Aşağıdaki kaynakları da incelemenizi öneririz:
- Bir oturum oluşturun
- HSM ile FSM arasında geçiş yapma
- Uygulamanıza uzamsal ortamlar ekleme
- Uygulamanıza 3D modeller ekleme