ตรวจสอบความสามารถเชิงพื้นที่

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

ความสามารถเชิงพื้นที่อาจแตกต่างกันไปในแต่ละอุปกรณ์ และเปลี่ยนแปลงเมื่อผู้ใช้โต้ตอบกับ แอปหรือระบบ แม้แต่แอปเองก็เปลี่ยนได้ เช่น การย้ายไปยัง Home Space หรือ Full Space แอปของคุณต้องตรวจสอบ ความสามารถเชิงพื้นที่เพื่อพิจารณาว่า API ใดบ้างที่รองรับในสภาพแวดล้อมปัจจุบัน เพื่อหลีกเลี่ยงปัญหา

ตรวจสอบความสามารถเชิงพื้นที่โดยใช้ Jetpack Compose สำหรับ XR

Jetpack Compose สำหรับ XR จะสร้าง Composition Local เพื่อตรวจสอบความสามารถเชิงพื้นที่ ใช้เพื่อตรวจสอบว่าเปิดใช้ UI เชิงพื้นที่ เสียงรอบทิศทาง สภาพแวดล้อม การส่งผ่าน หรือเนื้อหา 3 มิติหรือไม่

คุณใช้ LocalSpatialCapabilities.current เพื่อตรวจสอบว่าความสามารถเชิงพื้นที่ต่อไปนี้พร้อมใช้งานหรือไม่

  • isSpatialUiEnabled: ระบุว่าแอปพลิเคชันสร้างองค์ประกอบ UI เชิงพื้นที่ได้หรือไม่ (เช่น SpatialPanel)
  • isContent3dEnabled: ระบุว่าแอปพลิเคชันสร้างออบเจ็กต์ 3 มิติได้หรือไม่
  • isAppEnvironmentEnabled: ระบุว่าแอปพลิเคชันตั้งค่าสภาพแวดล้อมได้หรือไม่
  • isPassthroughControlEnabled: ระบุว่าแอปพลิเคชันควบคุมสถานะการส่งผ่านได้หรือไม่
  • isSpatialAudioEnabled: ระบุว่าแอปพลิเคชันใช้เสียงเชิงพื้นที่ได้หรือไม่

ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่าเปิดใช้ UI เชิงพื้นที่หรือไม่

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

ตรวจสอบความสามารถเชิงพื้นที่โดยใช้ SceneCore

เมื่อใช้ไลบรารี SceneCore คุณจะต้องสร้างเซสชัน เมื่อสร้างเซสชันแล้ว ให้ใช้ spatialCapabilities จากscene ของเซสชันเพื่อค้นหาว่าขณะนี้มีความสามารถเชิงพื้นที่ใดบ้างที่พร้อมใช้งาน

  • SPATIAL_3D_CONTENT: กิจกรรมสามารถสร้างเนื้อหา 3 มิติได้
  • APP_ENVIRONMENT: กิจกรรมสามารถตั้งค่าสภาพแวดล้อมของตัวเองได้
  • EMBED_ACTIVITY: กิจกรรมสามารถฝังกิจกรรมอื่นในเชิงพื้นที่ได้
  • PASSTHROUGH_CONTROL: กิจกรรมสามารถเปิด หรือปิดใช้การส่งผ่าน
  • SPATIAL_AUDIO: กิจกรรมสามารถใช้ระบบเสียงตามตำแหน่งได้
  • SPATIAL_UI: กิจกรรมสามารถสร้างพื้นที่ของตัวเองได้ (เช่น การเพิ่มแผงเชิงพื้นที่)

นอกจากนี้ คุณยังเลือกสมัครใช้การเรียกกลับ 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)
) {
    // ...
}

ใช้โหมดผสมเพื่อตรวจสอบความสามารถในการแสดงผลของอุปกรณ์

ใน Android XR ชุดหูฟัง XR และแว่นตา XR แบบมีสายมีความสามารถด้านฮาร์ดแวร์ที่แตกต่างกัน โดยเฉพาะอย่างยิ่งในเรื่องประเภทจอแสดงผล คุณอาจต้องปรับ สีของ UI ของแอปและออบเจ็กต์ที่แสดงผลเพื่อเพิ่มระดับการมองเห็นสูงสุด ซึ่ง อาจได้รับผลกระทบจากประเภทการแสดงผลและโหมดการผสมสีที่อุปกรณ์ต้องการ API DisplayBlendMode จะให้ความสามารถของโหมดผสมของอุปกรณ์ สำหรับการแสดงผล ใช้ API นี้เพื่อกำหนดวิธีเพิ่มเนื้อหาเสมือนลงในโลกแห่งความเป็นจริง

ประเภทของโหมดการผสมบางส่วนที่ควรทราบมีดังนี้

  • ADDITIVE: ระบบจะเพิ่มเนื้อหาเสมือนลงในโลกแห่งความเป็นจริงโดยการเพิ่ม ค่าพิกเซลสำหรับคอมโพเนนต์สีแดง สีเขียว และสีน้ำเงินแต่ละรายการ ระบบจะไม่สนใจค่าอัลฟ่า และ พิกเซลสีดำจะปรากฏเป็นแบบโปร่งใส
  • ALPHA_BLEND: ระบบจะเพิ่มเนื้อหาเสมือนลงในโลกจริงโดยการผสมค่าพิกเซลแบบอัลฟ่า ตามคอมโพเนนต์อัลฟ่า
  • NO_DISPLAY: อุปกรณ์ไม่รองรับการผสม

ใช้ XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() จากไลบรารีรันไทม์ Jetpack XR เพื่อตรวจสอบว่าใช้โหมดการผสมประเภทใด และทำการปรับเปลี่ยนตามต้องการ

ดูเพิ่มเติม