オーバーレイとは
オーバーレイは、SteamVR が VR の景色の上に重ねて出す画面です。この考え方を知ると、「ゲームの中にしか出せない」という思い込みを避けて、自分のツールをどこに出すかを決められます。
オーバーレイは、VR の景色の上に重ねる画面
Section titled “オーバーレイは、VR の景色の上に重ねる画面”SteamVR のダッシュボードを開くと、メニューやパネルが景色の手前に浮かびます。あの画面が、オーバーレイの身近な例です。手首に付くメニューや、空中に浮かぶ時計のような画面も、同じ仕組みで出せます。
つまり、オーバーレイは「VR のシーンとは別の層に出る画面」です。VRChat のようなゲームの画面は、シーンを描くアプリが出します。オーバーレイは、その上に別の層として重なります。
ゲームとは別のアプリが出す
Section titled “ゲームとは別のアプリが出す”FloatSoda では、ゲームとは別のアプリからオーバーレイを出します。ゲームを改造しなくても、自分で作ったアプリから画面を重ねられます。VRChat にワールドを作った人でなくても、VRChat の上に自分のツールを出せます。
オーバーレイのアプリは、ゲームと同時に動きます。ゲームとオーバーレイで同じコントローラーのボタンを使うと、入力が競合することがあります。ボタンやスティックの入力がどちらに届くかは、SteamVR のアクションセットの優先度で決まります。
置き場所は3種類
Section titled “置き場所は3種類”FloatSoda では、オーバーレイの置き場所を、ウィンドウの種類で選びます。選べるのは3種類です。
| 置き場所 | FloatSoda のウィンドウ | 出る場所 | ポインタで押せるか |
|---|---|---|---|
| SteamVR のダッシュボード | DashboardWindow |
ダッシュボードを開いたときの画面 | 押せる |
| ワールド座標に固定 | WorldSpaceWindow |
部屋のある位置(メートルで指定) | 押せない(表示専用) |
| トラッキングデバイスに追従 | DeviceTrackedWindow |
HMD やコントローラーのそば | 押せない(表示専用) |
ポインタ(コントローラーから出るレーザー)で押せるのは、ダッシュボードだけです。ワールド座標固定と追従のオーバーレイに GestureDetector を置いても、コンパイルは通りますが、タップのコールバックは呼ばれません。時刻や FPS を出す表示専用の画面は、どの置き場所でも作れます。
- ボタンを押す画面は、
DashboardWindowに置くこと(追跡: #182)
置き場所の選び方は、オーバーレイの種類と選び方で詳しく説明します。ほかにできないことは、リファレンスのできないこと・まだ使えないものにまとめています。
FloatSoda が担うこと
Section titled “FloatSoda が担うこと”FloatSoda は、オーバーレイを出すための面倒な部分を引き受けます。引き受けるのは、画面の描画、置き場所の管理、ポインタ入力の受け取りの3つです。描いた画像は、OpenVR のオーバーレイのテクスチャとして SteamVR に渡されます。
自分で書くのは、画面の中身です。ウィンドウの種類を選び、Child に部品を入れ子にして画面を組み立てます。
オーバーレイを出すアプリは、シーンを描くアプリではありません。そのため FloatSoda は、SteamVR の描画の同期を使わず、目標のフレームレートで自分で更新を刻みます。この刻みも FloatSoda が担うので、利用者のコードには出てきません。
ほかの作り方との違いはほかの作り方と比べるで、手元で書き始める準備は開発環境を用意するで説明しています。