{ } { }
Jetpack SceneCore
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
12 กุมภาพันธ์ 2025 | - | - | - | 1.0.0-alpha02 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ XR SceneCore คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
ดึงดูด
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha01" // 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-alpha01" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha01") // 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-alpha01") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพิงบิวด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของเครื่องมือติดตามปัญหา
รุ่น 1.0
เวอร์ชัน 1.0.0-alpha02
12 กุมภาพันธ์ 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha02
และ androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
เผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่ส่งผลต่อแอปที่สร้างก่อน 1.0.0-alpha02
- ย้ายเมธอดการสร้างจากคลาส
Session
ไปยังเมธอดที่ใช้ร่วมกันในแต่ละประเภทที่เกี่ยวข้องแล้ว ดังนี้- ระบบได้ลบ
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
และแทนที่ด้วยActivityPanelEntity.create(Session, Dimensions, String, Pose)
แล้ว - ระบบได้ลบ
Session.createAnchorEntity(Anchor)
และแทนที่ด้วยAnchorEntity.create(Session, Anchor)
แล้ว - ระบบได้ลบ
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
และแทนที่ด้วยAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
แล้ว - ระบบได้ลบ
Session.createEntity(String, Pose)
และแทนที่ด้วยContentlessEntity.create(Session, String, Pose)
แล้ว - ระบบได้ลบ
Session.createExrImageResource(String)
และแทนที่ด้วยExrImage.create(Session, String)
แล้ว - ระบบได้ลบ
Session.createGltfEntity(GltfModel, Pose)
และแทนที่ด้วยGltfModelEntity.create(Session, GltfModel, Pose)
แล้ว - ระบบได้ลบ
Session.createGltfModelResource(String)
และแทนที่ด้วยGltfModel.create(Session, String)
แล้ว - ระบบได้ลบ
Session.createInteractableComponent(Executor, InputEventListener)
และแทนที่ด้วยInteractableComponent.create(Session, Executor, InputEventListener)
แล้ว - ระบบได้ลบ
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
และแทนที่ด้วยMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
แล้ว - ระบบได้ลบ
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
และแทนที่ด้วยPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
แล้ว - ระบบได้ลบ
Session.createResizableComponent(Dimensions, Dimensions)
และแทนที่ด้วยResizableComponent.create(Session, Dimensions, Dimensions)
แล้ว - ระบบได้ลบ
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
และแทนที่ด้วยStereoSurface.create(Session, Int, Dimensions, Pose)
แล้ว
- ระบบได้ลบ
- ระบบนําเมธอดที่เลิกใช้งานต่อไปนี้ออกแล้ว
- ลบ
Session.canEmbedActivityPanel(Activity)
แล้ว ให้ใช้getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
แทน - ลบ
Session.hasSpatialCapability(Int)
แล้ว เราได้แทนที่getSpatialCapabilities()
โดยใช้getSpatialCapabilities().hasCapability()
เป็นวิธีที่แยกส่วนมากขึ้นในการตรวจสอบความพร้อมใช้งานของความสามารถเชิงพื้นที่ เนื่องจากgetSpatialCapabilities()
จะแสดงผลออบเจ็กต์SpatialCapabilities
- ระบบได้ลบ
Session.requestFullSpaceMode()
และแทนที่ด้วยSpatialEnvironment.requestFullSpaceMode()
แล้ว - ระบบได้ลบ
Session.requestHomeSpaceMode()
และแทนที่ด้วยSpatialEnvironment.requestHomeSpaceMode()
แล้ว
- ลบ
- ย้าย
Session.setFullSpaceMode(Bundle)
และSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
ไปยังฟังก์ชันส่วนขยายแล้ว ไฟล์ของนักพัฒนาแอปจะต้องเพิ่มการนําเข้าใหม่เพื่อเข้าถึง ดังนี้import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
- ย้าย
Session.setPreferredAspectRatio(Activity, Float)
ไปยังฟังก์ชันส่วนขยายแล้ว ไฟล์ของนักพัฒนาแอปจะต้องเพิ่มการนําเข้าใหม่เพื่อเข้าถึง ดังนี้import androidx.xr.scenecore.setPreferredAspectRatio
- ย้าย
Session.getEntitiesOfType(Class<out T>)
และSession.getEntityForRtEntity(RtEntity)
ไปยังฟังก์ชันส่วนขยายแล้ว ไฟล์ของนักพัฒนาแอปจะต้องเพิ่มการนําเข้าใหม่เพื่อเข้าถึง ดังนี้import androidx.xr.scenecore.getEntitiesOfType
import androidx.xr.scenecore.getEntityForRtEntity
- ลบ
Session.unpersistAnchor(Anchor)
แล้ว - ลบ
Session.createPersistedAnchorEntity(UUID)
แล้ว
ปัญหาที่ทราบแล้ว
PanelEntity.setCornerRadius()
และActivityPanelEntity.setCornerRadius()
อาจไม่มีผลจนกว่าจะย้ายแผงครั้งถัดไป ซึ่งสามารถลดปัญหานี้ได้ด้วยการย้ายแผงไปยังตำแหน่งปัจจุบัน- เมื่อเรียกใช้
BoundsChanged
ในActivitySpace
ActivityPose
บางรายการอาจได้รับการอัปเดตอย่างไม่ถูกต้อง ระบบจะอัปเดตข้อมูลในOnSpaceUpdated
ครั้งถัดไปในวันที่ActivitySpace
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบและการเปลี่ยนแปลงด้านลักษณะการทำงาน
PanelEntity
และActivityPanelEntity
จะมีรัศมีมุมเริ่มต้น 32dp หรือน้อยกว่านั้นหากแผงมีความกว้างหรือความสูงน้อยกว่า 32dp
API และความสามารถใหม่ๆ
- เปิดตัว
StereoSurface.CanvasShape
ซึ่งช่วยให้สร้างแคนวาสSpherical
และHemispherical
เพื่อแสดงผลสื่อที่สมจริงได้ - ตอนนี้
StereoSurfaceEntity.create()
ยอมรับพารามิเตอร์CanvasShape
แล้ว (ปัจจุบันระบบจะไม่สนใจพารามิเตอร์นี้ แต่จะใช้ในรุ่นที่จะออกในอนาคต) StereoSurfaceEntity.create()
ไม่รับพารามิเตอร์Dimensions
อีกต่อไป แอปพลิเคชันควรควบคุมขนาดของ Canvas ผ่านการตั้งค่าCanvasShape
StereoSurfaceEntity
มีสมาชิกCanvasShape
ซึ่งสามารถตั้งค่าแบบไดนามิกได้- ตอนนี้
StereoSurfaceEntity.dimensions
เป็นพร็อพเพอร์ตี้แบบอ่านอย่างเดียว แอปพลิเคชันควรตั้งค่าCanvasShape
เพื่อเปลี่ยนมิติข้อมูล - ตอนนี้
StereoSurfaceEntity
อนุญาตให้ตั้งค่าStereoMode
อีกครั้งหลังจากสร้างแล้ว
การเปลี่ยนแปลงอื่นๆ
- ลด minSDK ขณะคอมไพล์เป็น 24 API ทั้งหมดของ Jetpack XR จะยังคงต้องใช้ API ระดับ 34 ที่รันไทม์ต่อไป
- แฟกทอรีเซสชันของ
SceneCore
(Session.create
) จะไม่เปิด Intent เพื่อขอสิทธิ์SCENE_UNDERSTANDING
อีกต่อไป แต่แอปพลิเคชันไคลเอ็นต์ต้องขอสิทธิ์จากผู้ใช้อย่างชัดเจนก่อนที่จะพยายามสร้างหมุดยึด การสร้างหมุดจะล้มเหลวหากผู้ใช้ไม่ได้ให้สิทธิ์
แก้ไขข้อบกพร่อง
getActivitySpacePose()
ได้รับการแก้ไขให้พิจารณามาตราส่วนActivitySpace
โดยแสดงผลค่าการแปลเป็นเมตรที่มีการปรับขนาดแทนที่จะแสดงผลเมตรที่ไม่มีการปรับขนาดเสมอ นอกจากนี้transformPoseTo
ยังใช้หน่วยที่ถูกต้องในการคํานวณการเปลี่ยนแปลงพิกัดเมื่อActivitySpace
มีส่วนร่วมในแหล่งที่มาหรือปลายทางด้วย- ตอนนี้ระบบจะตั้งค่าพื้นหลังท้องฟ้าเป็นพื้นหลังท้องฟ้าสีดําล้วนทุกครั้งที่มีการส่งค่ากําหนดพื้นหลังท้องฟ้าเป็นค่า Null โดยใช้
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
หากต้องการเปลี่ยนกลับไปใช้พื้นหลังท้องฟ้าและเรขาคณิตเริ่มต้นของระบบ ให้ใช้setSpatialEnvironmentPreference(null).
เวอร์ชัน 1.0.0-alpha01
12 ธันวาคม 2024
androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
ได้รับการปล่อยแล้ว
ฟีเจอร์ของรุ่นแรก รุ่นแรกสำหรับนักพัฒนาแอปของ Jetpack SceneCore ซึ่งเป็นไลบรารีกราฟฉาก 3 มิติสำหรับสร้างและจัดการฉากและสภาพแวดล้อมที่สมจริง คลังนี้ช่วยให้คุณวางและจัดเรียงโมเดล 3 มิติและแผงเนื้อหาให้สัมพันธ์กัน รวมถึงกับสภาพแวดล้อมเสมือนจริงหรือในโลกจริง
- SpatialEnvironment: สร้างประสบการณ์ที่สมจริงโดยสมบูรณ์ด้วยรูปภาพสกายบ็อกซ์และ/หรือเรขาคณิตโมเดล 3 มิติเป็นฉากหลังสำหรับฉาก XR ของสภาพแวดล้อม หรือเปิดใช้การส่งผ่านเพื่อให้ฉากเสมือนผสานรวมกับสภาพแวดล้อมในชีวิตจริงของผู้ใช้
- PanelEntity: เพิ่มเนื้อหา 2 มิติลงในฉาก 3 มิติโดยการฝังเลย์เอาต์และกิจกรรม Android มาตรฐานลงในแผงที่มีการระบุตำแหน่งเชิงพื้นที่ซึ่งสามารถลอยหรือยึดกับพื้นผิวในชีวิตจริง
- GltfModelEntity: วาง เคลื่อนไหว และโต้ตอบกับโมเดล 3 มิติในฉาก SceneCore รองรับรูปแบบไฟล์ glTF เพื่อให้ผสานรวมกับโมเดลที่มีอยู่ได้ง่าย
- เสียงรอบทิศทาง: เพิ่มแหล่งที่มาของเสียงแบบแอมเบียนท์และแบบจุดลงในฉาก 3 มิติเพื่อให้ได้เสียงที่สมจริงและสมจริง
- StereoSurfaceEntity: SceneCore รองรับการกำหนดเส้นทางเนื้อหาที่แสดงผลบนพื้นผิว Android สำหรับตาซ้าย/ขวา ซึ่งสามารถใช้เพื่อแสดงผลเนื้อหาภาพสเตอริโอในรูปแบบคู่ขนานหรือบนล่าง เช่น รูปภาพสเตอริโอ วิดีโอ 3 มิติ หรือ UI แบบอื่นๆ ที่แสดงผลแบบไดนามิก แอปพลิเคชันควรใช้ MediaPlayer หรือ ExoPlayer ในการถอดรหัสวิดีโอ
- ระบบคอมโพเนนต์: SceneCore มีระบบคอมโพเนนต์ที่มีประสิทธิภาพและยืดหยุ่นสำหรับการเพิ่มความสามารถให้กับเนื้อหา XR รวมถึงการอำนวยความสะดวกให้ผู้ใช้ย้าย ปรับขนาด และโต้ตอบกับโมเดลและแผง
- ยึด: เมื่อเปิดใช้โหมดนี้ คุณจะยึดแผงและโมเดลกับพื้นผิวจริงได้ ซึ่งช่วยให้ผู้ใช้ผสานรวมเนื้อหาเสมือนจริงเข้ากับสภาพแวดล้อมจริงได้อย่างราบรื่น
- ท่าทางของผู้ใช้: เข้าถึงตําแหน่งของผู้ใช้ในฉากเสมือนจริงเพื่อปรับแนวเนื้อหาให้สอดคล้องกับตําแหน่งของผู้ใช้
- SpatialCapabilities: สร้างแอปที่ปรับให้เหมาะกับผู้ใช้ทุกรูปแบบอย่างเต็มรูปแบบ ซึ่งใช้ประโยชน์จากความสามารถแบบพื้นที่ (หากมี) เช่น การวางตำแหน่งเนื้อหา UI แบบ 3 มิติ นอกจากนี้ แอปยังตรวจสอบการเปลี่ยนแปลงความสามารถขณะที่แอปทำงานอยู่เพื่อปรับเปลี่ยนประสบการณ์การใช้งานตามวิธีที่ผู้ใช้ใช้อุปกรณ์ Android XR ได้ด้วย
ปัญหาที่ทราบ
- ปัจจุบันต้องใช้ minSDK 30 เพื่อใช้ Jetpack SceneCore วิธีแก้ปัญหาคือเพิ่มรายการไฟล์ Manifest ต่อไปนี้
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
เพื่อให้สามารถบิลด์และรันด้วย minSDK 23 - เซสชันอาจใช้งานไม่ได้ในสถานการณ์ต่างๆ ที่ระบบสร้างกิจกรรมขึ้นมาใหม่โดยอัตโนมัติ ซึ่งรวมถึงการปรับขนาดแผงหลัก การเชื่อมต่ออุปกรณ์ต่อพ่วง และการเปลี่ยนระหว่างโหมดสว่างและโหมดมืด หากพบปัญหาเกี่ยวกับเซสชันที่ไม่ถูกต้อง วิธีแก้ปัญหา ได้แก่ การทำให้แผงหลักปรับขนาดไม่ได้ การใช้เอนทิตีแผงแบบไดนามิก การปิดใช้การสร้างกิจกรรมใหม่สำหรับการเปลี่ยนแปลงการกําหนดค่าที่เฉพาะเจาะจง หรือการปิดใช้การเปลี่ยนแปลงธีมโหมดสว่าง/โหมดมืด
- GltfEntity ไม่รองรับคอมโพเนนต์ที่เคลื่อนย้ายและปรับขนาดได้
- GltfEntity ไม่รองรับ Entity.getSize()
- แอป Jetpack XR ต้องขอสิทธิ์
android.permission.SCENE_UNDERSTANDING
ใน AndroidManifest - การสร้างเซสชันใช้ได้ในอุปกรณ์ Android XR เท่านั้น ขณะนี้ หากคุณสร้างเซสชันและพยายามใช้เซสชันในอุปกรณ์ที่ไม่ใช่ Android XR คุณจะได้รับ RuntimeException
- การตั้งค่าพื้นหลังท้องฟ้าเป็น Null ผ่าน `SpatialEnvironment.setSpatialEnvironmentPreference() ไม่ได้ทำให้พื้นหลังท้องฟ้าเป็นสีดําสนิทตามที่ระบุไว้ในเอกสาร ซึ่งอาจส่งผลให้ระบบใช้พื้นหลังท้องฟ้าเริ่มต้นหรือไม่มีการเปลี่ยนแปลงพื้นหลังท้องฟ้าปัจจุบัน
- ไคลเอ็นต์ SceneCore ควรเพิ่ม
implementation(“com.google.guava:listenablefuture-1.0”)
ลงในการกำหนดค่า Gradle สำหรับทรัพยากร Dependency ของแอป ในรุ่นที่จะออกในอนาคต Scenecore จะรวมไลบรารีนี้ไว้เป็นapi
Dependency เพื่อให้ลูกค้าไม่ต้องประกาศอย่างชัดแจ้ง - SceneCore รวม
com.google.guava:guava-31.1-android
และcom.google.protobuf:protobuf-javalite
ไว้เป็น transitive dependencies อย่างไม่ถูกต้อง หากส่งผลให้เกิดข้อผิดพลาดของคลาสที่ซ้ำกันในบิลด์ คุณสามารถยกเว้นการพึ่งพา 2 รายการนี้ได้อย่างปลอดภัย - หากแอปใช้ SceneCore และเปิดใช้ ProGuard แอปจะขัดข้องเมื่อคุณสร้างเซสชัน วิธีแก้ปัญหาชั่วคราวคือปิดใช้ ProGuard ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเปิดใช้ ProGuard ได้ในคู่มือนี้