WebXR 應用程式生命週期
在本指南中,我們將對建立和驅動 WebXR 應用所涉及的內容有一個概覽,而不會深入到程式碼層面。這為 WebXR 指南後續的文章做準備,這些文章將涵蓋 啟動和關閉 WebXR 會話、幾何、模擬攝像頭、空間追蹤 等內容。
生命週期概述
大多數使用 WebXR 的應用都會遵循類似的整體設計模式。
-
檢查使用者的裝置和瀏覽器是否都能夠提供您想提供的 XR 體驗。
- 確保 WebXR API 可用;如果
navigator.xr未定義,您可以假設使用者的瀏覽器和/或裝置不支援 WebXR。如果不支援,請停用用於啟用 XR 功能的任何使用者介面,並中止任何進入 XR 模式的嘗試。 - 呼叫
navigator.xr.isSessionSupported(),指定您想提供的 WebXR 體驗模式:inline、immersive-vr或immersive-ar,以確定您希望提供的會話型別是否可用。 - 如果您想使用的會話型別可用,請向使用者提供適當的介面以允許他們啟用它。
- 確保 WebXR API 可用;如果
-
當用戶透過與上面啟用的使用者介面互動來請求啟用 WebXR 功能時,使用所需的模式請求一個
XRSession。這是透過呼叫navigator.xr.requestSession()來完成的,同樣指定指示您想啟用的模式的字串:inline、immersive-vr或immersive-ar。 -
如果
requestSession()返回的 Promise 解析,則使用新的XRSession在 WebXR 體驗期間管理 WebXR 會話。這將涉及管理輸入、動畫和渲染。- 呼叫
XRSession方法requestAnimationFrame()來排程 XR 裝置的第一個幀渲染。 - 如果您的場景很複雜,您應該考慮建立一個
Worker(或使用您之前為此目的建立的 Worker)來執行渲染每一幀所需的計算。這將減少渲染過程明顯示卡住應用的機率。 - 每個
requestAnimationFrame()回撥都應該使用關於 3D 世界中物件的資訊來使用 WebGL 渲染幀。 - 每次呼叫回撥時,它都應該再次呼叫
requestAnimationFrame(),以便讓瀏覽器知道在渲染下一幀時需要再次執行回撥。
- 呼叫
-
當時間到來時(例如,當用戶退出您的應用或離開您的網站時),結束 XR 會話;否則,繼續迴圈直到使用者選擇退出 XR 模式。
- 要自己結束 XR 會話,請呼叫
XRSession.end()。 - 包含一個
XRSession事件end事件的處理器,以便在會話結束時收到通知,無論會話是您的程式碼、使用者還是瀏覽器發起的終止。
- 要自己結束 XR 會話,請呼叫