เพิ่มพื้นที่ย่อยลงในแอป

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
ชุดหูฟัง XR
แว่นตา XR แบบใช้สาย

พื้นที่ย่อยคือพาร์ติชันของพื้นที่ 3 มิติภายในแอป ซึ่งคุณสามารถวางโมเดล 3 มิติ สร้างเลย์เอาต์ 3 มิติ และเพิ่มมิติให้กับเนื้อหา 2 มิติได้ ระบบจะแสดงผลพื้นที่ย่อยก็ต่อเมื่อเปิดใช้การสร้างเสียงรอบทิศทางเท่านั้น ใน Home Space หรือในอุปกรณ์ที่ไม่ใช่ XR ระบบจะไม่สนใจโค้ดใดๆ ภายในพื้นที่ย่อยนั้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับเลย์เอาต์เชิงพื้นที่และคอมโพเนนต์ที่คุณใช้ภายในพื้นที่ย่อยได้ที่คอมโพเนนต์เชิงพื้นที่

เกี่ยวกับลำดับชั้นของสเปซย่อย

Subspace ระดับบนสุดคือพื้นที่ย่อยด้านนอกสุดที่แอปเรียกใช้ การเรียกใช้เมธอด Subspace แต่ละครั้งจะสร้างลำดับชั้น UI เชิงพื้นที่ใหม่ที่เป็นอิสระ โดยจะไม่รับค่าตำแหน่งเชิงพื้นที่ การวางแนว หรือขนาดของ Subspace ระดับบนที่ฝังอยู่

หากต้องการสร้าง Subspace ที่ฝังหรือซ้อนกันภายใน SpatialPanel, Orbiter, SpatialPopup หรือคอมโพเนนต์อื่นๆ ให้ใช้ PlanarEmbeddedSubspace

PlanarEmbeddedSubspace มีความแตกต่างที่สำคัญ 2 ประการจาก Subspace ดังนี้

  • โดยจะอยู่ในเลย์เอาต์ 2 มิติที่เรียกใช้ ซึ่งหมายความว่าความสูงและความกว้างของพื้นที่ย่อยจะถูกจำกัดโดยความสูงและความกว้างของเลย์เอาต์หลัก 2 มิติ
  • โดยจะทำงานเป็นองค์ประกอบย่อยของเอนทิตีที่เรียกใช้ ซึ่งหมายความว่าหากคุณเรียกใช้ Subspace Composable ที่ฝังอยู่ภายใน SpatialPanel Subspace นั้นจะเป็นองค์ประกอบย่อยของ 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