Jetpack SceneCore
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
30 lipca 2025 r. | - | - | - | 1.0.0-alpha05 |
Deklarowanie zależności
Aby dodać zależność od XR SceneCore, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Odlotowe
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha05" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha05") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.0
Wersja 1.0.0-alpha05
30 lipca 2025 r.
androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05
, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05
i androidx.xr.scenecore:scenecore:1.0.0-alpha05
są zwalniane. Wersja 1.0.0-alpha05 zawiera te commity.
Nowe funkcje
- Dodano interfejs API Perceived Resolution do jednostek panelu i
SurfaceEntities
. (I118f6) PerceivedResolution
Dodano metody wywołania zwrotnego do pliku Scene.kt, aby monitorować postrzeganą rozdzielczość głównego panelu aktywności w HSM. (I58084)SurfaceEntity
– dodano obsługę aplikacji, która może prosić o nadpróbkowanie w momencie tworzenia. Umożliwia to aplikacjom używanie filtra nadpróbkowania do wygładzania krawędzi. (I06913)- Dodano właściwość
recommendedContentBoxInFullSpace
do usługiActivitySpace
. W trybie pełnego ekranu zwraca rekomendowane pole, w którym można umieścić treści. (I4cd6f) - Dodano przeciążony konstruktor modyfikatora przenośnego, który umożliwia zakotwiczenie. (Ic0c70)
Zmiany w interfejsie API
W tej wersji wprowadziliśmy w SceneCore
wiele zmian w interfejsie API. Kilka klas zostało zmienionych lub przeniesionych do innych modułów, a większość metod pobierających i ustawiających została zastąpiona właściwościami Kotlin. Do czasu pierwszej wersji beta przewidujemy przyszłe zmiany interfejsu API, które mogą powodować problemy, ale nie będą one tak uciążliwe ani liczne.
- Zmieniono nazwy i/lub przeniesiono te klasy i interfejsy:
androidx.xr.scenecore.PixelDimensions
naandroidx.xr.runtime.math.IntSize2d
,androidx.xr.scenecore.Dimensions
naandroidx.xr.runtime.math.FloatSize3d
,androidx.xr.scenecore.ActivityPose
naScenePose
,androidx.xr.scenecore.ContentlessEntity
naGroupEntity
,androidx.xr.scenecore.PlaneType
naPlaneOrientation
,androidx.xr.scenecore.PlaneSemantic
naPlaneSemanticType
. (Ifd405)(I3b622) (If534d) - Niektóre metody ustawiające właściwości klasy
Scene
zostały ustawione jako prywatne, ponieważ nie miały być zmieniane przez klientówSceneCore
:activitySpace
,activitySpaceRoot
,mainPanelEntity
,perceptionSpace
,spatialCapabilities
,spatialEnvironment
ispatialUser
. (I2f506) - W przypadku elementu zmieniono te właściwości:
get/setParent()
,setContentDescription
; wycofano właściwośćEntity.is/setHidden()
, zamiast niej używaj właściwościEntity.is/setEnabled
. (Ibc4c6) - Usunięto klasę
androidx.xr.scenecore.BasePanelEntity
. Zamiast niej używaj bezpośrednio klasyPanelEntity
. Zastąpiono metody pobierające i ustawiające dlaPanelEntity
właściwościami. Zmieniono usługęPanelEntity.size
zFloat3dSize
naFloat2dSize
. Usunęliśmy wycofaną metodęandroidx.xr.scenecore.PanelEntity.getPixelDimensions
. Zamiast niej używaj metodygetSizeInPixels
. (Icc174) - Tekst
androidx.xr.scenecore.OnSpaceUpdatedListener
został zamieniony naRunnable
. (I19308) - Zastąpiono
SpatialUser.getCameraViews()
właściwością. (Ib0cc5) W przypadku funkcjiExrImage
iGltfModel:
zmieniono metodycreate
na funkcje zawieszania; zmodyfikowano parametry tworzenia, aby akceptowałyUri
lubPath
zamiastString
. (Id8883) (I0d247), (I25706) - Przeniesiono
SpatialEnvironment.requestFullSpaceMode
iSpatialEnvironment.requestHomeSpaceMode
do sceny, np. użyjsession.scene.requestFullSpaceMode()
zamiastsession.scene.spatialEnvironment.requestFullSpaceMode()
.addOnPassthroughOpacityChangedListener
iaddOnSpatialEnvironmentChangedListener
mają teraz zastąpienia, które akceptują opcjonalne obiekty Executor. (I12fe0) (I6b21e) - Usunięto te wycofane metody
SpatialEnvironment
:togglePassthrough
,setPassthrough
,setPassthroughOpacity
,getPassthroughMode
,getPassthroughOpacity
,setSkybox
isetGeometry
. Usunięto też wycofaną klasęSpatialEnvironment.PassthroughMode
(I927bd) (I927bd) (I927bd) - Zastąpiliśmy te metody pobierające i ustawiające
SpatialEnvironment
właściwościami Kotlin:getCurrentPassthroughOpacity()
,get/setPassthroughOpacityPreference()
,get/setSpatialEnvironmentPreference()
,isSpatialEnvironmentPreferenceActive()
(I33a7b) (Ie06e2) (Ie06e2) - Typ
SpatialEnvironmentPreference.preferredPassthroughOpacity
zmieniono zFloat?
naFloat
. Nie akceptuje już wartości null. Zamiast tego używa sięSpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE
, aby zasygnalizować brak preferencji dotyczących krycia. (I40107) - Zaktualizowano parametr
windowBoundsPx
napixelDimensions
, a jego typ z Rect naIntSize2d
w metodzie create. (I1926e) SpatialEnvironment
konstruktor jest teraz wewnętrzny (I75a51)- Zastąpiono klasy
SpatialPointerIconNone
iSpatialPointerIconCircle
obiektami towarzyszącymiSpatialPointerIcon.NONE
iSpatialPointerIcon.CIRCLE
(I416d2). - Pole
SpatialPointerIcon
w tabeliSpatialPointerComponent
nie może już mieć wartości null. Użyj wartościSpatialPointerIcon.DEFAULT
zamiast wartości null, aby wskazać, że należy użyć domyślnej ikony wskaźnika systemu. (I416d2) - Zastąpiliśmy
androidx.xr.scenecore.AnchorEntity.getState()
właściwością tylko do odczytu. Zmieniliśmy nazwy parametrów w metodzieAnchorEntity.create()
, aby były bardziej zrozumiałe. W metodachAnchorEntity
ustawiania i dodawania odbiorców odbiorca został przeniesiony na ostatni argument, aby umożliwić stosowanie lambd końcowych. Zastąpionoandroidx.xr.scenecore.OnStateChangedListener
w przypadkuAnchorEntity
tekstemConsumer<AnchorEntity.State>
. (I472e0) GltfModelEntity.getAnimationState()
jest teraz usługą. (I10b29)- Zastąpiono
ActivitySpace.getBounds()
właściwością. Zmieniono nazwęActivitySpace.addBoundsChangedListener
naActivitySpace.addOnBoundsChangedListener
. ZastąpionoActivitySpace.setOnSpaceUpdatedListener
metodami dodawania i usuwania. (I4c956) AnchorPlacement: planeTypeFilter
zmieniono naanchorablePlaneOrientations
, aplaneSemanticFilter
zmieniono naanchorablePlaneSemanticTypes
. DodanieMovableComponent
doAnchorEntity
lubActivitySpace
zwróci wartość „false”,MoveListener
została zmieniona naEntityMoveListener shouldDisposeParentAnchor
,EntityMoveListener shouldDisposeParentAnchor
została zmieniona nadisposeParentOnReAnchor systemMovable
,disposeParentOnReAnchor systemMovable
została usunięta z funkcjicreate
na rzeczcreeateCustomMovable
,createSystemMovable
icreateAnchorable
(If11c4)- Usuwa koncepcję zajęć
SurfaceEntity.featherRadiusX/Y
i dodaje koncepcję zajęćEdgeFeatheringParams
. (Ic78fc) - Metoda
PanelEntity.enablePanelDepthTest()
została zastąpiona właściwościąpanelClippingConfig
. UstawScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)
, aby włączyć testowanie głębi, lubPanelClippingConfig(isDepthTestEnabled = false)
, aby je wyłączyć. (I0cbe0) Scene.mainPanelEntity
ma teraz typMainPanelEntity
zamiastPanelEntity
(I7125a)- Zmieniono nazwę metody
setFullSpaceMode
w scenie naconfigureBundleForFullSpaceModeLaunch
, a metodysetFullSpaceModeWithEnvironmentInherited
naconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited
. (I0cbe0) (I0cbe0) - Zmiana nazw wartości UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV i WITHIN_FOV na SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW i SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW (Ie7e8c)
SpatialVisibility
- Klasa
SpatialVisibility
została zastąpiona obiektem publicznym ze stałymi wartościami Int.setSpatialVisibilityChangedListener
akceptuje terazConsumer<Int>
zamiastConsumer<SpatialVisibility>
(Ie7e8c) PointerCaptureComponent
stałych zmieniono nazwy i przeniesiono do obiektuPointerCaptureComponent.PointerCaptureState
(I9c7ac)- Tekst
PointerCaptureComponents' StateListener
został zamieniony naConsumer<Int>
. (I9c7ac) - Tekst
InputEventListener
został zamieniony naConsumer<InputEvent>
(I9c7ac) setPreferredAspectRatio
został przeniesiony z klasy Scene do obiektuSpatialWindow
i jako pierwszy parametr przyjmuje Session. (I7b717)Entity.setHidden()
zastąpiono przezEntity.setEnabled()
, aEntity.isHidden()
zastąpiono przezEntity.isEnabled()
.setHidden(false)
jest równesetEnabled(true)
iisHidden() == !isEnabled()
. (Icf0de)- Typ
Entity.contentDescription
został zmieniony z ciągu znaków naCharSequence
. (Ie59be) Session.create
iSession.configure
zwracają terazSecurityException
, gdy nie przyznano wystarczających uprawnień, zamiast zwracaćSessionCreatePermissionsNotGranted
lubSessionConfigurePermissionsNotGranted
. (I7c488)ResizableComponent.create
wymaga terazConsumer<ResizeEvent> ResizeEventListener
został zastąpiony przezConsumer<ResizeEvent> ResizableComponent.size
został zmieniony naResizableComponent.affordanceSize ResizableComponent.minimumSize
został zmieniony naResizableComponent.minimumEntitySize ResizableComponent.maximumSize
został zmieniony naResizableComponent.maximumEntitySize
,ResizableComponent.autoHideContent
został zmieniony naResizableComponent.shouldAutoHideContent
ResizableComponent.forceShowResizeOverlay
został zmieniony naResizableComponent.shouldAlwaysShowOverlay
(I97a2d)- Zmniejszono wartość
minSDK
do 24 w przypadku reklamodawcówandroidx.xr.scenecore
iandroidx.xr.compose
. Pakiety XR nadal wymagają interfejsu API 34 w czasie działania. (I17224) - Usunięto ograniczenie
RequiresApi(34)
we wszystkich pakietach Jetpack XR. To ograniczenie było zbędne, ponieważ Jetpack XR jest obecnie dostępny tylko na urządzeniach z poziomem API 34 lub wyższym. (Iae0f8) - Główny artefakt
SceneCore
(xr:scenecore:scenecore
) będzie zawierać tylko asynchroniczne interfejsy API w stylu Kotlina. Programiści Java mogą korzystać z bibliotekixr:scenecore:scenecore-guava
, aby uzyskiwać dostęp do zgodnych interfejsów API. (If221b) - Projekty wydane w Kotlinie 2.0 wymagają do użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie:
-Xjspecify-annotations=strict
(jest to domyślny argument począwszy od wersji 2.1.0 kompilatora Kotlin) (Ia8420) - Wszystkie metody asynchroniczne, które zwracają
ListenableFuture
, zostały zastąpione funkcjami zawieszania w Kotlinie. Deweloperzy Java, którzy chcą używać metod asynchronicznych opartych naListenableFuture
zamiast funkcji zawieszających Kotlin, muszą teraz używać funkcji rozszerzeń w:xr:scenecore-scenecore-guava
. Na przykładGuavaExrImage
zawiera asynchroniczne funkcje ExrImage odpowiadające funkcjom Guava,GuavaScenePose
zawiera asynchroniczne funkcjeScenePose
odpowiadające funkcjom Guava,GuavaGltfModel
zawiera asynchroniczne funkcjeGuava-equivalent GltfModel
itd. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Poprawki błędów
- Zaktualizowano regułę Jetpack XR Scenecore
ProGuard
, aby zapobiecAbstractMethodError
w przypadku zminimalizowanych klientów. (I91a01) - Dodatkowe poprawki obsługi minifikacji Proguard w przypadku Jetpack XR
SceneCore
(I4f47e) - Usunęliśmy błąd, który mógł powodować awarię, jeśli
InteractableComponent
whitPosition
wInputEvent
zwracał wartość null (I7a695).hitPosition
- Nazwy wartości trybu konfiguracji zostały zmienione, aby odzwierciedlały ich działanie. (I6d247)
- Rozwiązaliśmy problemy z polem widzenia i
HitTest
wSceneCore
TestApp. (I2c51e) - Naprawiono błąd w funkcji
SpatialCapabilities.hasCapability()
, która zwracała wartość „prawda”, jeśli którykolwiek z przekazanych w niej argumentów był prawdziwy, a nie tylko wtedy, gdy wszystkie argumenty były prawdziwe. (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOM
zaktualizowano, aby górna mapa była widoczna dla lewego oka, a dolna dla prawego. (I4ae68)
Wersja 1.0.0-alpha04
7 maja 2025 r.
androidx.xr.scenecore:scenecore:1.0.0-alpha04
i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04
zostają opublikowane. Wersja 1.0.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Funkcja obsługi powrotu będzie teraz działać w przypadku elementów panelu bez osadzonych aktywności. Aby działało cofanie, musisz określić
android:enableOnBackInvokedCallback= "true"
w manifeście Androida. StereoSurfaceEntity
obsługuje teraz odtwarzanie MV-HEVC dzięki 2 nowymStereoMode
wartościom: MULTIVIEW_LEFT_PRIMARY i MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSize
iPanelEntity.getSize
zwracają teraz rozmiary w przestrzeni nadrzędnej.Entity.setPose
,Entity.getPose
,Entity.setScale
,Entity.getScale
,Entity.setAlpha
iEntity.getAlpha
przyjmują teraz nowy parametrrelativeTo
, który umożliwia pobieranie i ustawianie wartości względem różnych przestrzeni. Obsługiwane wartości to Parent, Activity i Real World spaces, a domyślna wartość tego parametru to Parent.- Dodano metody rozszerzenia wywołania zwrotnego widoczności przestrzennej do
SessionExt.kt
, aby monitorować, kiedy zawartość sceny przesuwa się wewnątrz lub na zewnątrz pola widzenia użytkownika. - Do obszaru roboczego
SpatialAudioTrack
dodano elementsetPointSourceParams
, co umożliwia aktualizowanie parametrów po utworzeniu ścieżki. - Dodaliśmy nową klasę Scene z odwołaniami do interfejsów
Scenecore
API. Scena będzie dostępna jako właściwość rozszerzenia sesji. Funkcje wSessionExt
zostały przeniesione do sceny, więc importy trzeba będzie dostosować, np.SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
–SessionExt.addSpatialCapabilitiesChangedListener
- Dodano emotikon
ActivityPose.hitTestAsync
, który umożliwiahitTest
w przypadku treści wirtualnych. - Dodano nowy typ komponentu
SpatialPointerComponent
, który umożliwia klientom określenie ikony renderowanej dla wskaźnika lub wyłączenie ikony. Ten komponent można obecnie dołączać tylko doPanelEntity
instancji. - Wprowadzamy nowy
PanelEntity
, który przyjmuje wymiary panelu w metrach lub pikselach. Starsza fabrykaPanelEntity
, która przyjmowała 2 parametry typu Dimension dla panelu, została usunięta.
Zmiany w interfejsie API
- Usunięto ograniczenie
RequiresApi(34)
we wszystkich pakietach Jetpack XR. To ograniczenie było zbędne, ponieważ Jetpack XR jest obecnie dostępny tylko na urządzeniach z poziomem API 34 lub wyższym. (Iae0f8) - Projekty wydane w Kotlinie 2.0 wymagają do użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Zajęcia
PermissionHelper
zostały usunięte. - Środowisko wykonawcze
PanelEntity.getPixelDensity
zostało wycofane. PanelEntity.setPixelDimensions
iPanelEntity.getPixelDimension
zostały usunięte i zastąpione przezsetSizeInPixels
igetSizeInPixels
.- Opcja
Entity.getActivitySpaceAlpha
została usunięta. Można go zastąpić elementemEntity.getAlpha(Space.Activity)
. - Opcja
Entity.getWorldSpaceScale
została usunięta. Można go zastąpić elementemEntity.getScale(Space.REAL\_WORLD)
. - Klasa Session w
SceneCore
została usunięta na rzecz klasy Session w środowisku wykonawczym XR. - Nazwa
StereoSurfaceEntity
została zmieniona naSurfaceEntity
. Entity.setSize
iEntity.getSize
zostaną usunięte, a te same metody zostaną dodane doPanelEntity
.- Nazwa
PointSourceAttributes
została zmieniona naPointSourceParams
. - Nazwa
SpatializerConstants.SOURCE\_TYPE\_BYPASS
została zmieniona naSpatializerConstants.SOURCE\_TYPE\_DEFAULT
. PointSourceParams
został zmieniony z dostępu publicznego na wewnętrzny.AnchorEntity.create
wymaga teraz skonfigurowaniaPlaneTrackingMode
wSession.configure()
.- Interfejsy API
SpatialUser
wymagają teraz skonfigurowania parametruHeadTrackingMode
w usłudzeSession.configure()
. - Jeśli
ResizableComponent
nie jest dołączony, zamiast logu na poziomie ERROR zostanie wygenerowany log na poziomie INFO. - Klasa Fov jest teraz zwykłą klasą Kotlin.
- Podziel
Entity.kt
, aby umieścić każdy typ konkretnego elementu w osobnym pliku. - Podczas tworzenia nowego
PanelEntity
większość widoków zostanie przeniesiona doFrameLayout
. Ułatwia to korzystanie zLayoutInspector
w przypadku paneli przestrzennych. - Obecnie używana instancja
XrExtensions
jest teraz zarejestrowana na platformie w miarę możliwości, aby ułatwić debugowanie aplikacji.
Poprawki błędów
- Dodaliśmy poprawkę, która zapobiega awarii, do której mogło dojść podczas przenoszenia
PanelEntity
zMovableComponent
iAnchorPlacement
. - Rozwiązaliśmy problem, który powodował, że funkcja
ResizableComponent
przekazywała nieaktualne rozmiary w wywołaniu zwrotnymonResizeStart
. - Rozwiązano problem z awarią, która występowała, gdy funkcja
JxrPlatformAdapterAxr
'sdispose()
była wywoływana wielokrotnie.
Wersja 1.0.0-alpha03
26 lutego 2025 r.
androidx.xr.scenecore:scenecore:1.0.0-alpha03
i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
zostają opublikowane. Wersja 1.0.0-alpha03 zawiera te commity.
Nowe funkcje
- Minimalizacja Proguard jest teraz obsługiwana w przypadku kodu Jetpack XR
Poprawki błędów
- Dodatkowe poprawki obsługi minimalizacji Proguard w przypadku Jetpack XR SceneCore (I4f47e)
- Zaktualizowano regułę Jetpack XR Scenecore
ProGuard
, aby zapobiecAbstractMethodError
w przypadku zminimalizowanych klientów. (I91a01)
Wersja 1.0.0-alpha02
12 lutego 2025 r.
androidx.xr.scenecore:scenecore:1.0.0-alpha02
i androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
zostają opublikowane. Wersja 1.0.0-alpha02 zawiera te zmiany.
Nadchodząca zmiana powodująca niezgodność wsteczną, która wpłynie na aplikacje utworzone przed wersją 1.0.0-alpha02
- Metody fabrykujące zostały przeniesione z klasy
Session
do metody towarzyszącej w przypadku każdego typu:- Usługa
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
została usunięta i zastąpiona usługąActivityPanelEntity.create(Session, Dimensions, String, Pose)
- Usługa
Session.createAnchorEntity(Anchor)
została usunięta i zastąpiona usługąAnchorEntity.create(Session, Anchor)
- Usługa
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
została usunięta i zastąpiona usługąAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
- Usługa
Session.createEntity(String, Pose)
została usunięta i zastąpiona usługąContentlessEntity.create(Session, String, Pose)
- Usługa
Session.createExrImageResource(String)
została usunięta i zastąpiona usługąExrImage.create(Session, String)
- Usługa
Session.createGltfEntity(GltfModel, Pose)
została usunięta i zastąpiona usługąGltfModelEntity.create(Session, GltfModel, Pose)
- Usługa
Session.createGltfModelResource(String)
została usunięta i zastąpiona usługąGltfModel.create(Session, String)
- Usługa
Session.createInteractableComponent(Executor, InputEventListener)
została usunięta i zastąpiona usługąInteractableComponent.create(Session, Executor, InputEventListener)
- Usługa
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
została usunięta i zastąpiona usługąMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
- Usługa
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
została usunięta i zastąpiona usługąPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
- Usługa
Session.createResizableComponent(Dimensions, Dimensions)
została usunięta i zastąpiona usługąResizableComponent.create(Session, Dimensions, Dimensions)
- Usługa
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
została usunięta i zastąpiona usługąStereoSurface.create(Session, Int, Dimensions, Pose)
- Usługa
- Usunęliśmy te wycofane metody:
- Pokój
Session.canEmbedActivityPanel(Activity)
został usunięty. Zamiast niej używaj zasadygetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
. - Pokój
Session.hasSpatialCapability(Int)
został usunięty. Została ona zastąpiona przezgetSpatialCapabilities().hasCapability()
, która jest bardziej odseparowanym sposobem sprawdzania obecności funkcji przestrzennych, ponieważgetSpatialCapabilities()
zwraca obiektSpatialCapabilities
. - Usługa
Session.requestFullSpaceMode()
została usunięta i zastąpiona usługąSpatialEnvironment.requestFullSpaceMode()
- Usługa
Session.requestHomeSpaceMode()
została usunięta i zastąpiona usługąSpatialEnvironment.requestHomeSpaceMode()
- Pokój
Session.setFullSpaceMode(Bundle)
iSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
zostały przeniesione do funkcji rozszerzeń. Aby uzyskać dostęp, do plików dewelopera trzeba będzie dodać nowe instrukcje importu:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)
została przeniesiona do funkcji rozszerzenia. Do plików dewelopera trzeba będzie dodać nowy import, aby uzyskać dostęp:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)
iSession.getEntityForRtEntity(RtEntity)
zostały przeniesione do funkcji rozszerzeń. Aby uzyskać dostęp, do plików dewelopera trzeba będzie dodać nowe instrukcje importu:import androidx.xr.scenecore.getEntitiesOfType
import androidx.xr.scenecore.getEntityForRtEntity
- Pokój
Session.unpersistAnchor(Anchor)
został usunięty - Pokój
Session.createPersistedAnchorEntity(UUID)
został usunięty
Znane problemy
PanelEntity.setCornerRadius()
iActivityPanelEntity.setCornerRadius()
mogą zostać wprowadzone dopiero po następnym przesunięciu panelu. Można temu zapobiec, przesuwając panel do jego bieżącej pozycji.- Gdy funkcja
BoundsChanged
jest wywoływana naActivitySpace
, niektóreActivityPose
mogą nie zostać prawidłowo zaktualizowane. Zostanie ona zaktualizowana podczas następnej rozmowyOnSpaceUpdated
, która odbędzie sięActivitySpace
.
Zmiany powodujące niezgodność i zmiany w zachowaniu
PanelEntity
iActivityPanelEntity
będą miały domyślny promień zaokrąglenia wynoszący 32 dp lub mniej, jeśli panel ma szerokość lub wysokość mniejszą niż 32 dp.
Nowe interfejsy API i możliwości
- Wprowadza
StereoSurface.CanvasShape
, które umożliwia tworzenie obszarówSpherical
iHemispherical
do renderowania multimediów immersyjnych. StereoSurfaceEntity.create()
akceptuje teraz parametrCanvasShape
. (Ten parametr jest obecnie ignorowany, ale będzie używany w przyszłej wersji)StereoSurfaceEntity.create()
nie przyjmuje już parametruDimensions
. Aplikacje powinny kontrolować rozmiar obszaru roboczego, ustawiając wartośćCanvasShape
StereoSurfaceEntity
maCanvasShape
element, który można ustawić dynamicznie.StereoSurfaceEntity.dimensions
jest teraz właściwością tylko do odczytu. Aby zmienić wymiary, aplikacje powinny ustawićCanvasShape
.StereoSurfaceEntity
umożliwia teraz ponowne ustawienieStereoMode
po zakończeniu budowy.
Inne zmiany
- Zmniejszono minimalną wersję SDK w czasie kompilacji do 24. Wszystkie interfejsy Jetpack XR API nadal wymagają interfejsu API w wersji 34 w czasie działania.
- Fabryka sesji
SceneCore
(Session.create
) nie uruchamia już intencji uzyskania uprawnieńSCENE_UNDERSTANDING
. Zamiast tego aplikacja kliencka musi wyraźnie poprosić użytkownika o przyznanie uprawnień przed podjęciem próby utworzenia kotwic. Jeśli użytkownik nie przyzna tego uprawnienia, utworzenie kotwicy się nie powiedzie.
Poprawki błędów
getActivitySpacePose()
został poprawiony, aby uwzględniać skalęActivitySpace
, zwracając wartości translacji w skalowanych metrach, a nie zawsze w metrach nieskalowanych.transformPoseTo
używa teraz też odpowiednich jednostek do obliczania zmian współrzędnych, gdy w źródle lub miejscu docelowym występujeActivitySpace
.- Gdy za pomocą
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
zostanie przekazane ustawienie pustego skyboxa, będzie on ustawiany na całkowicie czarny. Aby przywrócić domyślne ustawienia systemu dotyczące skyboxa i geometrii, użyjsetSpatialEnvironmentPreference(null).
Wersja 1.0.0-alpha01
12 grudnia 2024 r.
Zostanie wycofaneandroidx.xr.scenecore:scenecore-* 1.0.0-alpha01
Funkcje pierwszej wersji Pierwsza wersja deweloperska Jetpack SceneCore, biblioteki grafu scen 3D do tworzenia i manipulowania wciągającymi scenami i środowiskami. Ta biblioteka umożliwia umieszczanie i aranżowanie modeli 3D oraz paneli treści względem siebie i w środowiskach wirtualnych lub rzeczywistych.
- SpatialEnvironment: twórz w pełni immersyjne środowiska z obrazem skybox lub geometrią modelu 3D jako tłem dla sceny XR Twojego środowiska. Możesz też włączyć tryb passthrough, aby wirtualna scena mogła być zintegrowana z otoczeniem użytkownika w świecie rzeczywistym.
- PanelEntity: dodawaj treści 2D do scen 3D, osadzając standardowe układy i aktywności Androida w przestrzennych panelach, które mogą unosić się w powietrzu lub być przymocowane do powierzchni w rzeczywistym świecie.
- GltfModelEntity: umieszczaj, animuj i wykorzystuj w interakcjach modele 3D w scenie. SceneCore obsługuje format pliku glTF, co ułatwia integrację z istniejącymi modelami.
- SpatialAudio: dodaj do sceny 3D źródła dźwięku otoczenia i punktowe, aby uzyskać w pełni przestrzenny dźwięk.
- StereoSurfaceEntity: SceneCore obsługuje kierowanie treści renderowanych na Android Surface do lewego i prawego oka. Można go używać do renderowania treści stereoskopowych w formacie obok siebie lub góra-dół, takich jak zdjęcia stereo, filmy 3D lub inne dynamicznie renderowane interfejsy. Aplikacje powinny używać odtwarzacza MediaPlayer lub ExoPlayer do dekodowania wideo.
- System komponentów: SceneCore oferuje solidny i elastyczny system komponentów do dodawania funkcji do treści XR, w tym możliwości przesuwania, zmiany rozmiaru i interakcji z modelami i panelami.
- Zakotwiczenie: po włączeniu trybu passthrough możesz przyłączać panele i modele do rzeczywistych powierzchni, zapewniając użytkownikom płynną integrację treści wirtualnych z ich otoczeniem.
- Pozycja użytkownika: dostęp do lokalizacji użytkownika w scenie wirtualnej, aby dostosować treści do jego pozycji.
- SpatialCapabilities: twórz w pełni adaptacyjne aplikacje, które wykorzystują funkcje przestrzenne, gdy są dostępne, np. pozycjonowanie treści interfejsu w 3D. Aplikacja może też monitorować zmiany w funkcjach podczas działania, aby modyfikować sposób korzystania z niej w zależności od tego, jak użytkownik używa urządzenia z Androidem XR.
Znane problemy
- Obecnie do korzystania z Jetpack SceneCore wymagany jest pakiet SDK w wersji co najmniej 30. Aby obejść ten problem, dodaj ten wpis do pliku manifestu
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
, aby móc tworzyć i uruchamiać aplikację z wersją minSDK 23. - Sesja może stać się nieważna w różnych sytuacjach, które automatycznie odtwarzają aktywność, np. podczas zmiany rozmiaru panelu głównego, podłączania urządzeń peryferyjnych czy przełączania się między trybem jasnym a ciemnym. Jeśli napotkasz problemy z unieważnianiem sesji, możesz zastosować obejścia, takie jak uniemożliwienie zmiany rozmiaru panelu głównego, użycie dynamicznego panelu, wyłączenie ponownego tworzenia aktywności w przypadku określonych zmian konfiguracji lub wyłączenie zmian motywu w trybie jasnym/ciemnym.
- Komponenty Movable i Resizable nie są obsługiwane w przypadku komponentu GltfEntity.
- Metoda Entity.getSize() nie jest obsługiwana w przypadku elementu GltfEntity.
- Aplikacje Jetpack XR muszą prosić o uprawnienie
android.permission.SCENE_UNDERSTANDING
w pliku AndroidManifest. - Tworzenie sesji jest obsługiwane tylko na urządzeniach z Androidem XR. Obecnie, jeśli utworzysz sesję i spróbujesz użyć jej na urządzeniu XR z systemem innym niż Android, otrzymasz wyjątek RuntimeException.
- Ustawienie skyboxa na wartość null za pomocą funkcji `SpatialEnvironment.setSpatialEnvironmentPreference()` nie powoduje, że skybox jest całkowicie czarny, jak podano w dokumentacji. Może to spowodować przywrócenie domyślnego skyboxa lub brak zmian w obecnym skyboxie.
- Klienci SceneCore powinni dodać
implementation(“com.google.guava:listenablefuture-1.0”)
do konfiguracji Gradle w przypadku zależności aplikacji. W przyszłej wersji scenecore będzie zawierać tę bibliotekę jakoapi
zależność, więc klienci nie będą musieli jej jawnie deklarować. - Biblioteka SceneCore błędnie uwzględnia
com.google.guava:guava-31.1-android
icom.google.protobuf:protobuf-javalite
jako zależności przechodnie. Jeśli spowoduje to błędy duplikatów klas w kompilacji, te 2 zależności można bezpiecznie wykluczyć. - Jeśli Twoja aplikacja korzysta z SceneCore i ma włączony ProGuard, ulegnie awarii podczas tworzenia sesji. Aby obejść ten problem, wyłącz ProGuard. Więcej informacji o włączaniu ProGuarda znajdziesz w tym przewodniku.