XRSystem
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
WebXR 機器 API の XRSystem
インターフェイスは、WebXR セッションを表す XRSession
オブジェクトにアクセスできるようにするメソッドを提供します。 その XRSession
が手元にあれば、それを使用して拡張現実 (AR) または仮想現実 (VR) 機器と対話できます。
インスタンスプロパティ
XRSystem
はプロパティを直接提供していませんが、親インターフェイスである EventTarget
からプロパティを継承しています。
インスタンスメソッド
親インターフェイスである EventTarget
から継承したメソッドに加えて、XRSystem
インターフェイスには次のメソッドがあります。
isSessionSupported()
Experimental-
ブラウザーが指定されたセッションモードに対応している場合、
true
に解決するプロミスを返します。 指定されたモードに対応していない場合、false
に解決します。 requestSession()
Experimental-
指定されたセッションモードを持つ新しい
XRSession
に解決するプロミスを返します。
イベント
devicechange
Experimental-
使用可能な XR 機器のセットが変更されたときに送信されます。
ondevicechange
イベントハンドラーを使用することもできます。
使用上の注意
このインターフェイスは、以前のバージョンの仕様では単に XR
と呼ばれていました。 コードや文書に XR
への参照がある場合は、それを XRSystem
に置き換えてください。
例
次の例は、isSessionSupported()
と requestSession()
の両方を使用する方法を示しています。
if (navigator.xr) {
immersiveButton.addEventListener("click", onButtonClicked);
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
immersiveButton.disabled = !isSupported;
});
}
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()
を使用して開始し、返されたプロミスが解決したら、関数 onSessionStarted()
を呼び出して、レンダリングなどのためにセッションを設定します。
一方、進行中の XR セッションがすでに存在する場合は、代わりに end()
を呼び出して現在のセッションを終了します。 現在のセッションが終了すると、end
イベントが送信されるので、そのハンドラーで xrSession
を null
に設定して、進行中のセッションがなくなったことを記録します。 そうすれば、ユーザーがボタンをもう一度クリックすることで、新しいセッションが開始されます。
仕様書
Specification |
---|
WebXR Device API # xrsystem-interface |
ブラウザーの互換性
BCD tables only load in the browser