--- title: 'XRReferenceSpace: reset イベント' slug: Web/API/XRReferenceSpace/reset_event tags: - API - AR - Event - Graphics - Reality - Reference - VR - Virtual - WebXR - WebXR API - WebXR Device API - XR - XRReferenceSpace - augmented - reset translation_of: Web/API/XRReferenceSpace/reset_event ---
{{APIRef("WebXR Device API")}}{{secureContext_header}}
ネイティブの原点または実際の原点のいずれかで不連続が検出されると、reset
イベントが {{domxref("XRReferenceSpace")}} オブジェクトに送信され、参照空間を使用して方向付けられたオブジェクトの位置または方向がジャンプします。 これは、ユーザーが XR デバイスを較正または再較正する場合、またはデバイスがユーザーの追跡を失った後に原点を自動的に変更してから再び取得する場合によく見られます。
{{domxref("XRBoundedReferenceSpace")}} オブジェクトの場合、{{domxref("XRBoundedReferenceSpace.boundsGeometry", "boundsGeometry")}} が変更されたときに reset
イベントを発生させることもできます。
いずれの場合も、イベントは、新しい原点を利用する WebXR アニメーションフレームが実行される前に送信されます。
バブリング | あり |
---|---|
キャンセル | 不可 |
インターフェイス | {{domxref("XRReferenceSpaceEvent")}} |
イベントハンドラープロパティ | {{domxref("XRReferenceSpace/onreset", "onreset")}} |
reset
イベントは、参照空間の原点を変更し、イベントの {{domxref("XRReferenceSpaceEvent.transform", "transform")}} プロパティで示されるように移動および回転することにより、座標系がリセットまたは再構成されたことを示します。 イベントは、アニメーションフレームのコールバックが実行されて保留中のフレームがレンダリングされる前に送信され、これらのコールバックで更新された座標系が使用可能であることを確認します。
リセットが発生する理由はいくつかあります。 それらの間で最も一般的なものは次のとおりです。
local
または local-floor
の参照空間の問題です。bounded-floor
参照空間では、ユーザーが参照空間の境界を出て新しい参照空間に入る場合、座標系をリセットできます(ゲーム内のあるレベルから別のレベルに横断する場合など、各レベルは独自の座標系を持つ独自のマップです)。unbounded
参照空間の問題です。unbounded
参照空間にいて、開始位置(参照空間の原点)から十分に離れているため、浮動小数点またはその他の形式の誤差またはドリフトが問題になります。 このため座標系は、ユーザーの現在の位置またはその近くの新しい原点でリセットされます。注: 参照空間が以前の原点の追跡を取り戻すことができる場合、reset
イベントは発生しません。 これは、原点が強制的に再配置されていないことを意味します。 このイベントは、追跡喪失から回復するために原点を再配置する必要がある場合にのみ発生します。
VR ヘッドセットを使用したことがある人なら、起動したときに正面を向いているのに、ヘッドセットは空や床を見ていると勘違いしたり、ハンドコントローラーをまっすぐ前に向けているのに、どこか上や右に向けていると勘違いしたりしたことがあるでしょう。このような場合、通常はどこかのボタンを押し続けると、世界がデバイスの現在の向きに再同期されます。 これは、ヘッドセットの向きに基づいた1つまたは複数の参照空間に `reset` イベントを送信することで機能します。
ビューアーの位置のジャンプは、{{domxref("XRPose")}} の Boolean プロパティ {{domxref("XRPose.emulatedPosition", "emulatedPosition")}} を監視することで処理できます。 ビューアーの位置のジャンプが、emulatedPosition
が true
から false
に切り替わるのと同時に起こった場合、ビューアーは追跡を回復し、新しい位置は以前にエミュレートされた値からの補正を表します。 これは、サイトまたはアプリが、(XR デバイスが移動を導入するために使用するユーザーの物理的な移動ではなく)ビューアーの位置や向きを明示的に変更することによる空間内のモーションをシミュレートしない場合に一般的に望ましい振る舞いです。
ただし、そのような「テレポート」が使用されている場合は、追跡を回復した後に、追加の潜在的に不快なジャンプが発生する可能性があり、実際にはユーザーの位置をジャンプしないようにする必要があります。 これを許可する代わりに、{{domxref("XRReferenceSpace.getOffsetReferenceSpace", "getOffsetReferenceSpace()")}} を呼び出す前に計算されたテレポーテーションオフセットに emulatedPosition
を統合して、更新された実際の原点が前のフレームからビューアーの位置がジャンプした隔たりによって調整された新しい参照空間を作成できます。 このようにして、ユーザーの位置を2回ではなく1回だけ変更します。
不連続が十分に小さく、デバイスが同じ追跡領域内で追跡を取り戻せる場合、reset
イベントは発生しません。 また、ユーザーの近くで空間の安定性を維持するために、時間の経過とともにネイティブの原点に小さな調整を加えるため、unbounded 参照空間で発生することもありません。 大きな不連続のみがリセットをトリガーします。
reset
イベントのハンドラーを追加するには、2つの方法のいずれかを使用できます。 まず、次のように {{domxref("EventTarget.addEventListener", "addEventListener()")}} メソッドを使用できます。
viewerRefSpace.addEventListener("reset", (event) => { /* perform reset related tasks */ });
2番目のオプションは、次のように XRReferenceSpace
オブジェクトの {{domxref("XRReferenceSpace.onreset", "onreset")}} イベントハンドラープロパティを設定することです。
viewerRefSpace.onreset = (event) => { /* perform reset related tasks */ };
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('WebXR','#eventdef-xrreferencespace-reset','reset event')}} | {{Spec2('WebXR')}} | 初期定義 |
{{Compat("api.XRReferenceSpace.onreset")}}