Uzamsal özellikler cihazlara göre değişebilir ve kullanıcılar uygulamanızla veya sistemle etkileşimde bulundukça değişebilir. Hatta uygulamanızın kendisi tarafından da değiştirilebilirler. Örneğin, ev alanına veya tam alana geçiş yapma. 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. Uzamsal kullanıcı arayüzü, üç boyutlu ses, ortamlar, geçiş 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, uzamsal kullanıcı arayüzü öğeleri (ör.SpatialPanel) 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ı gösterir.isPassthroughControlEnabled: Uygulamanın, geçiş durumunu kontrol edip edemeyeceğini gösterir.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ı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 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, uzamsal özellikler değiştiğinde sizi bilgilendiren bir geri arama hizmetine de abone olabilirsiniz.
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 başlıkları ve kablolu XR gözlükleri, özellikle ekran türüyle ilgili olarak farklı donanım özelliklerine sahiptir. Uygulamanızın kullanıcı arayüzünün ve oluşturulan nesnelerin renklerini, görünürlüğü en üst düzeye çıkaracak şekilde 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.
Ayrıca bkz.
- Bir oturum oluşturun
- HSM ile FSM arasında geçiş yapma
- Uygulamanıza uzamsal ortamlar ekleme
- Uygulamanıza 3D modeller ekleme