XRSystem

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

WebXR Device APIXRSystem インターフェイスは、WebXR セッションを表す XRSession (en-US) オブジェクトにアクセスできるようにするメソッドを提供します。 その XRSession が手元にあれば、それを使用して拡張現実(AR)または仮想現実(VR)デバイスと対話できます。

プロパティ

XRSystem はプロパティを直接提供しませんが、親インターフェイスである EventTarget からプロパティを継承します。

メソッド

XRSystem インターフェイスには、親インターフェイスである EventTarget からメソッドを継承することに加えて、次のメソッドが含まれています。

isSessionSupported() (en-US) Experimental

ブラウザーが指定された XRSessionMode (en-US) をサポートしている場合、true に解決される promise を返します。 指定されたモードをサポートしていない場合、false に解決されます。

requestSession() (en-US) Experimental

指定された XRSessionMode (en-US) を持つ新しい XRSession (en-US) に解決される promise を返します。

イベント

devicechange (en-US) Experimental

使用可能な XR デバイスのセットが変更されたときに送信されます。 ondevicechange (en-US) イベントハンドラーを使用することもできます。

使用上の注意

このインターフェイスは、以前のバージョンの仕様では単に XR と呼ばれていました。 コードや文書に XR への参照がある場合は、それを XRSystem に置き換えてください。

次の例は、isSessionSupported() (en-US)requestSession() (en-US) の両方を使用する方法を示しています。

js
if (navigator.xr) {
  immersiveButton.addEventListener("click", onButtonClicked);
  navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
    if (isSupported) {
      immersiveButton.disabled = false;
    } else {
      immersiveButton.disabled = true;
    }
  });
}

function onButtonClicked() {
  if (!xrSession) {
    navigator.xr.requestSession("immersive-vr").then((session) => {
      // onSessionStarted() not shown for reasons of brevity and clarity.
      onSessionStarted(session);
    });
  } else {
    // Shut down the already running XRSession
    xrSession.end().then(() => {
      // Since there are cases where the end event is not sent, call the handler here as well.
      onSessionEnded();
    });
  }
}

このコードは、navigator.xr プロパティを探して、WebXR が使用可能かどうかを確認することから始まります。 見つかった場合は、WebXR が存在することがわかっているので、ユーザーがクリックして没入型 VR モードのオンとオフを切り替えることができるボタンのハンドラーを確立します。

ただし、目的の没入型モードが利用可能かどうかはまだわかりません。 これを決定するために、ボタン immersiveButton を有効にする前に、必要なセッションオプションを渡して isSessionSupported() を呼び出します。 これにより、ユーザーは、没入型 VR モードが使用可能な場合にのみ没入型モードに切り替えることができます。 没入型 VR が利用できない場合、ボタンを使用できないように無効しています。

onButtonClicked() 関数は、実行中のセッションがすでに存在するかどうかを確認します。 存在しない場合は、requestSession() を使用して開始し、返された promise が解決したら、関数 onSessionStarted() を呼び出して、レンダリングなどのためにセッションを設定します。

一方、進行中の XR セッションがすでに存在する場合は、代わりに end() (en-US) を呼び出して現在のセッションを終了します。 現在のセッションが終了すると、end (en-US) イベントが送信されるので、そのハンドラーで xrSessionnull に設定して、進行中のセッションがなくなったことを記録します。 そうすれば、ユーザーがボタンをもう一度クリックすることで、新しいセッションが開始されます。

仕様

Specification
WebXR Device API
# xrsystem-interface

ブラウザーの互換性

BCD tables only load in the browser