XRInputSource: targetRayMode 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

只讀的 XRInputSource 屬性 targetRayMode 指示了輸入源的目標射線應該如何生成以及如何呈現給使用者。

通常,目標射線會從目標系統的源點沿目標射線方向發出,指向使用者正在看或指向的方向。射線的樣式以及射線終點的指示方式通常由您自行決定。目標點或物件可以透過繪製形狀或高亮顯示目標表面或物件來指示。

從手持控制器發出的目標射線

A screenshot showing a target ray being emitted by a hand controller

目標射線可以是從簡單的直線(最好是隨距離衰減)到動畫效果的任何東西,例如上面螢幕截圖中顯示的科幻風格“相位槍”效果。

一個字串,指示在生成和向用戶呈現目標射線時應使用哪種方法。可能的值為:

gaze

使用者正在使用凝視跟蹤系統(或凝視輸入),該系統可以檢測使用者正在檢視的方向。目標射線將從觀看者的眼睛發出,並沿他們正在檢視的方向延伸。

screen

目標射線的方向透過觸控式螢幕、滑鼠或其他觸覺輸入裝置的點選來指示。

tracked-pointer

目標是透過使用者指向目標方向的手持裝置或手部跟蹤系統來執行的。目標射線從手(或手中的物體)向目標方向延伸。方向根據平臺特定的規則確定,但如果沒有此類規則,則假定使用者將食指伸直指向前方來確定方向。

transient-pointer

輸入源是作為作業系統互動意圖的一部分生成的,而不是特定硬體。一些例子包括基於不適合直接公開的資訊(如凝視)的使用者意圖、來自 Web 驅動程式的合成輸入,或由輔助技術生成的輸入。

用法說明

輸入源的 targetRaySpace 指示了目標射線的位置和方向,可用於確定射線渲染的位置。

示例

此程式碼片段顯示了一個每幀都會呼叫的函式的某一部分。它會查詢具有非null targetRaySpace 的輸入。具有此屬性值的輸入表示從使用者向外投射目標射線的輸入。

對於每個此類輸入,此示例會查詢 targetRayModetracked-pointer 的輸入,這表明該輸入實際上是作為目標裝置而不是凝視裝置、螢幕點選或滑鼠單擊來表示的。對於跟蹤指標,將呼叫 myRenderTargetRayAsBeam() 函式,從輸入控制器的虛擬位置向其指向的方向渲染一道光束。

程式碼應繼續執行繪製控制器或虛擬空間中代表使用者手部位置的任何物件,以及任何其他與輸入相關的任務。

js
function updateInputSources(session, frame, refSpace) {
  for (const source of session.getInputSources()) {
    const targetRayPose = frame.getPose(inputSource.targetRaySpace, refSpace);

    if (targetRayPose) {
      if (source.targetRayMode === "tracked-pointer") {
        myRenderTargetRayAsBeam(targetRayPose);
      }
    }

    // …
  }
}

有關更多詳細資訊和更完整的示例,請參閱文章 輸入和輸入源

規範

規範
WebXR Device API
# dom-xrinputsource-targetraymode

瀏覽器相容性

另見