ゲーム開発チーム「丸ダイス」の開発ブログです! 公式サイトはこちら

【Unity】VRゲームでCameraを重ねた固定位置UIは基本作れない

SteamVR Pluginに関する技術メモです!

前提

時間制限のような固定位置でのUI要素を作りたい!

  • SteamVR PluginでのVR開発
  • Unity2021.3.14f1
  • Meta Quest 2 (Quest Linkを使用)
  • Windows10

分かったこと

結論から言うと、ヘッドセットに描画出来るカメラは1つだけです。

普通のゲームと同じ要領で、Depthを上げたUI用カメラをCanvasの中に入れて通常のカメラの描画結果の上に重ねて・・という方法は、おそらく不可能です。

動作検証の詳細

画像の通りプレビューではUIが表示されていますが、実行するとヘッドセットでは消えてしまいました。 機能している1人称カメラを試しに消したところ、UI用カメラの結果だけが描画されるのでなく、何も描画されない結果になりました。

いろいろ試したところ、UI用カメラに以下の条件が満たされているとUI用カメラのみがヘッドセットで描画されました。

  • Projection: PerspectiveはOK。OrthographicはNG
  • ClearFlags: Sky boxはOK。Depth OnlyはNG。(おそらくSkybox or Solid Color)
  • Depth: -1~1はOK。2はNG(おそらく2以上がNG)
  • Target Display: 1はOK。2はNG
  • Target Eye: BothがOK。NoneはNG (これは当然)

これらOK条件を全て満たしている場合のみ、Cameraがヘッドセットに描画されました。

そのようなカメラが複数ある場合は、Depthが高いものが優先されるようです。 条件を見れば分かる通り、そもそも複数のカメラで重ねて描画する設定が選択出来ません。

理由は不明ですが、ひとまずUIも含めて1カメラでシーン内に作っていくしかなさそうです。

推測

SteamVR PluginがUnityのカメラと深く結びついていて、マルチカメラが想定されていないまたは意図して制限しているのかもしれません。

一般的にいってカメラが複数あるとゲームのフレームレートは下がりますし、高FPSが必要とされるVRでは頑張って1カメラで作りなさいということなのかもしれませんね。