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

อุปกรณ์ 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: กิจกรรมสามารถปรับเปลี่ยนเชิงพื้นที่ได้เอง (เช่น การเพิ่มแผงเชิงพื้นที่)

นอกจากนี้ คุณยังเลือกสมัครรับ Callback 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 Runtime เพื่อตรวจสอบประเภทโหมดการผสมที่ใช้อยู่และทำการปรับเปลี่ยนตามต้องการ

ดูเพิ่มเติม