เริ่มต้นใช้งาน OpenXR สำหรับ Android XR

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

ก่อนเริ่มสร้างด้วยส่วนขยาย OpenXR ที่รองรับหรือด้วยเอนจินที่รองรับ โปรดอ่านข้อมูลและทําภารกิจในส่วนต่อไปนี้ เพื่อให้แน่ใจว่าได้กําหนดค่าแอปสําหรับการพัฒนา XR แบบสมจริงแล้ว

กำหนดค่าไฟล์ Manifest ของแอป

เช่นเดียวกับโปรเจ็กต์แอป Android อื่นๆ แอป Android XR ต้องมี AndroidManifest.xml ที่มีการตั้งค่า Manifest ที่เฉพาะเจาะจง ไฟล์ Manifest จะอธิบายข้อมูลสำคัญเกี่ยวกับแอปของคุณให้เครื่องมือบิลด์ของ Android, ระบบปฏิบัติการ Android และ Google Play ทราบ ดูข้อมูลเพิ่มเติมได้ที่คู่มือภาพรวมไฟล์ Manifest ของแอป

สำหรับแอป XR ที่แตกต่าง ไฟล์ Manifest ต้องมีองค์ประกอบและแอตทริบิวต์ต่อไปนี้

พร็อพเพอร์ตี้ PROPERTY_XR_ACTIVITY_START_MODE

พร็อพเพอร์ตี้ android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" ช่วยให้ระบบทราบว่าควรเปิดใช้กิจกรรมในโหมดใดเมื่อ เริ่มกิจกรรม

พร็อพเพอร์ตี้นี้มีค่าดังนี้

  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (OpenXR เท่านั้น)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

แอปที่สร้างด้วย OpenXR จะเปิดใน Full Space และต้องใช้ XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED โหมดเริ่มต้น Full Space ที่ไม่มีการจัดการ จะส่งสัญญาณไปยัง Android XR ว่าแอปใช้ OpenXR


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

พร็อพเพอร์ตี้ android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" จะระบุว่าควรเปิดแอปพลิเคชันด้วยขอบเขตประเภทใด แอปของคุณต้องระบุ XR_BOUNDARY_TYPE_LARGE หากออกแบบมาเพื่อให้ ผู้ใช้เคลื่อนที่ไปรอบๆ พื้นที่จริง การระบุ XR_BOUNDARY_TYPE_NO_RECOMMENDATION จะไม่ แนะนำประเภทขอบเขตความปลอดภัย ดังนั้นระบบจะใช้ประเภท ที่มีการใช้งานอยู่แล้ว

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

<uses-native-library> OpenXR

แอปพลิเคชัน OpenXR ต้องประกาศการใช้ไลบรารี OpenXR แบบเนทีฟเพื่อโหลดรันไทม์ให้สำเร็จ หากไม่มีการประกาศนี้ รันไทม์จะโหลดไม่สำเร็จ

<manifest ... >

    <application ... >

    <uses-native-library android:name="libopenxr.google.so" android:required="false" />

       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

ฟีเจอร์ PackageManager สำหรับแอป XR

เมื่อจัดจำหน่ายแอปผ่าน Google Play Store คุณจะระบุฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์ที่จำเป็นในไฟล์ Manifest ของแอปได้ องค์ประกอบ uses-feature ช่วยให้ Play Store กรองแอปที่แสดงต่อผู้ใช้ได้อย่างเหมาะสม

ฟีเจอร์ต่อไปนี้เป็นฟีเจอร์เฉพาะสำหรับแอปที่แตกต่างกันใน XR

android.software.xr.api.openxr

แอปที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Android XR และสร้างด้วย OpenXR หรือ Unity ต้อง รวมฟีเจอร์นี้ไว้ในไฟล์ Manifest ของแอปโดยตั้งค่าแอตทริบิวต์ android:required เป็น true

แอปที่ใช้ Android XR Extensions Package สำหรับ Unity เวอร์ชัน 1.0.0 ขึ้นไปหรือ Unity OpenXR: Android XR Package เวอร์ชัน 0.5.0-exp.1 ขึ้นไปไม่จำเป็นต้องเพิ่มองค์ประกอบนี้ลงในไฟล์ Manifest ของแอปด้วยตนเอง แพ็กเกจทั้ง 2 นี้จะแทรกองค์ประกอบนี้ลงในไฟล์ Manifest ของแอปให้คุณ

อุปกรณ์อาจระบุเวอร์ชันสำหรับฟีเจอร์นี้ ซึ่งบ่งบอกถึงเวอร์ชันสูงสุดของ OpenXR ที่อุปกรณ์รองรับ บิต 16 บิตบนแสดงถึง หมายเลขหลัก และบิต 16 บิตล่างแสดงถึงหมายเลขย่อย เช่น หากต้องการระบุ OpenXR เวอร์ชัน 1.1 ให้ตั้งค่าเป็น "0x00010001"

แอปสามารถใช้เวอร์ชันฟีเจอร์เพื่อระบุ OpenXR เวอร์ชันขั้นต่ำที่แอปต้องการได้ ตัวอย่างเช่น หากแอปของคุณต้องรองรับ OpenXR เวอร์ชัน 1.1 ให้ประกาศฟีเจอร์ต่อไปนี้

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

ฟีเจอร์นี้ระบุว่าแอปต้องใช้ข้อมูลจากตัวควบคุมการเคลื่อนไหว 6DoF (องศาอิสระ) ที่มีความแม่นยำสูงเพื่อให้ทำงานได้อย่างถูกต้อง หากแอป รองรับคอนโทรลเลอร์และทำงานไม่ได้หากไม่มีคอนโทรลเลอร์ ให้ตั้งค่าเป็น true หากแอปของคุณรองรับคอนโทรลเลอร์แต่ใช้งานได้โดยไม่ต้องใช้คอนโทรลเลอร์ ให้ตั้งค่าเป็น false

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

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

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

แฟล็กนี้ระบุว่าแอปต้องใช้การติดตามดวงตาที่มีความเที่ยงตรงสูงสำหรับการป้อนข้อมูล เพื่อให้ทำงานได้อย่างถูกต้อง หากแอปของคุณรองรับการติดตามดวงตาสำหรับการป้อนข้อมูลและทำงานไม่ได้หากไม่มีฟีเจอร์นี้ ให้ตั้งค่าเป็น true หากแอปของคุณรองรับการติดตามดวงตา สำหรับการป้อนข้อมูล แต่สามารถทำงานได้โดยไม่ต้องใช้การติดตามดวงตา ให้ตั้งค่าเป็น false

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

ขั้นตอนถัดไป

เมื่อกำหนดค่าไฟล์ Manifest ของแอปและตรวจสอบข้อมูลสำคัญเสร็จแล้ว ให้ดูวิธีสร้างแอปด้วย OpenXR