พื้นที่ย่อยคือพาร์ติชันของพื้นที่ 3 มิติภายในแอป ซึ่งคุณสามารถวางโมเดล 3 มิติ สร้างเลย์เอาต์ 3 มิติ และเพิ่มมิติให้กับเนื้อหา 2 มิติได้ ระบบจะแสดงผลพื้นที่ย่อยก็ต่อเมื่อเปิดใช้การสร้างเสียงรอบทิศทางเท่านั้น ใน Home Space หรือในอุปกรณ์ที่ไม่ใช่ XR ระบบจะไม่สนใจโค้ดใดๆ ภายในพื้นที่ย่อยนั้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับเลย์เอาต์เชิงพื้นที่และคอมโพเนนต์ที่คุณใช้ภายในพื้นที่ย่อยได้ที่คอมโพเนนต์เชิงพื้นที่
เกี่ยวกับลำดับชั้นของสเปซย่อย
Subspace ระดับบนสุดคือพื้นที่ย่อยด้านนอกสุดที่แอปเรียกใช้ การเรียกใช้เมธอด Subspace แต่ละครั้งจะสร้างลำดับชั้น UI เชิงพื้นที่ใหม่ที่เป็นอิสระ โดยจะไม่รับค่าตำแหน่งเชิงพื้นที่ การวางแนว หรือขนาดของ Subspace ระดับบนที่ฝังอยู่
หากต้องการสร้าง Subspace ที่ฝังหรือซ้อนกันภายใน SpatialPanel, Orbiter, SpatialPopup หรือคอมโพเนนต์อื่นๆ ให้ใช้ PlanarEmbeddedSubspace
PlanarEmbeddedSubspace มีความแตกต่างที่สำคัญ 2 ประการจาก Subspace ดังนี้
- โดยจะอยู่ในเลย์เอาต์ 2 มิติที่เรียกใช้ ซึ่งหมายความว่าความสูงและความกว้างของพื้นที่ย่อยจะถูกจำกัดโดยความสูงและความกว้างของเลย์เอาต์หลัก 2 มิติ
- โดยจะทำงานเป็นองค์ประกอบย่อยของเอนทิตีที่เรียกใช้ ซึ่งหมายความว่าหากคุณเรียกใช้ Subspace Composable ที่ฝังอยู่ภายใน
SpatialPanelSubspace นั้นจะเป็นองค์ประกอบย่อยของSpatialPanelที่เรียกใช้
ลักษณะการทำงานเหล่านี้ของ PlanarEmbeddedSubspace จะช่วยให้สามารถทำสิ่งต่างๆ ต่อไปนี้ได้
- การย้ายเอนทิตีย่อยพร้อมกับเอนทิตีหลัก
- การชดเชยตำแหน่งขององค์ประกอบย่อยโดยใช้ค่าออฟเซ็ต
SubspaceModifier - การนำเสนอวัตถุ 3 มิติที่ลอยอยู่เหนือ UI แบบ 2 มิติ และตรงกับความสูงและความกว้างของพื้นที่ที่เหมาะสมในเลย์เอาต์แบบ 2 มิติ
ปรับเลย์เอาต์สำหรับพื้นที่ย่อย
ใน Android XR เลย์เอาต์ของแอปจะเชื่อมโยงกับ VolumeConstraints ของ Subspace ในโหมด Full Space โดยค่าเริ่มต้น ด้วยเหตุนี้ คุณจึงควรพิจารณาจำนวนพื้นที่ที่มองเห็นได้ซึ่งผู้ใช้มี และปรับเลย์เอาต์ให้เหมาะสม recommendedContentBoxInFullSpace จะระบุมิติข้อมูลที่เฉพาะเจาะจงสำหรับกรอบล้อมรอบภายใน ActivitySpace เพื่อให้สามารถวางเนื้อหาภายในขอบเขตการมองเห็นของผู้ใช้ได้
เนื้อหาหลักของแอปควรอยู่ในกรอบนี้ หากคุณมีเนื้อหาที่ต้องเกินขอบเขตที่แนะนำ ให้พิจารณาเลย์เอาต์ที่กระตุ้นให้ผู้ใช้สำรวจพื้นที่โดยการขยับศีรษะ คุณสามารถลบล้างข้อจำกัดเริ่มต้นของ recommendedContentBoxInFullSpace ได้โดยใช้ตัวปรับแต่งตามขนาดที่กำหนดเอง เช่น SubspaceModifier.requiredSizeIn สำหรับลักษณะการทำงานที่ไม่มีขอบเขต ให้ตั้งค่า allowUnboundedSubspace = true
เรียกใช้ recommendedContentBoxInFullSpace โดยใช้ Session ปัจจุบันเพื่อรับมิติข้อมูลที่เฉพาะเจาะจงเหล่านี้ตามต้องการ โปรดดูตัวอย่างต่อไปนี้
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
เพิ่ม Subspace ลงในแอป
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่ม Subspace และ PlanarEmbeddedSubspace ลงในแอป
setContent { // This is a top-level subspace Subspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is an embedded subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in the top-level Subspace PlanarEmbeddedSubspace { SpatialPanel {} } }
ดูรายละเอียดเพิ่มเติมได้ในเอกสารอ้างอิงฉบับเต็มเกี่ยวกับ Subspace และ PlanarEmbeddedSubspace