【Unity】VRHMDとPCディスプレイに別のカメラ映像を出力する
はじめに
こんにちは、まつさこ です。
この記事では、UnityでVRHMDとPCディスプレイに別のカメラ映像を出力する方法について説明します。Steamなどにリリースする前提の、ハイエンドPC向けVRコンテンツの開発に活用できると思います。
開発環境
筆者の開発環境は以下です。
- Unity 2022.3.10f1
- Rider 2023.2.3
また、本記事では XR Interaction Toolkit
が導入済みの、OpenXR
環境が動作する前提で実装を紹介します。
UnityHubから導入できる、公式のテンプレートプロジェクトを使用します。
- Target Platform は
Windows
- デバッグには MetaQuest2 による QuestLink を使用
Unity における XR Interaction Toolkit を活用した実装は、こりんさんの以下のブログが大変参考になります。
Unity VR開発メモ(XR Interaction Toolkit)
カメラの設置
プレイヤー視点のカメラ(通常は XR Origin 等の CenterEyeCamera)とは別のカメラを新しく作成してください。三人称視点カメラなので、 ThirdViewCamera
という名前のオブジェクトにしました。
Camera
コンポーネントについて以下の設定をします。
- コンポーネントのチェックを外し、初期状態で
enabled = false
にする。 - Output > Target Eye を
None
にする。
スクリプトの作成
次のような MultiCameraDisplay.cs
を作成します。
using UnityEngine;
using UnityEngine.XR;
public class MultiCameraDisplay : MonoBehaviour
{
Camera _thirdViewCamera;
void Start()
{
//カメラコンポーネントを取得
_thirdViewCamera = GetComponent<Camera>();
//PCディスプレイ表示を三人称視点カメラに切り替え
OnThirdView();
}
//PCディスプレイにプレイヤー目線を表示
void OnPlayerView()
{
_thirdViewCamera.enabled = false;
XRSettings.gameViewRenderMode = GameViewRenderMode.LeftEye;
}
//PCディスプレイにThirdViewCamera映像を表示
void OnThirdView()
{
_thirdViewCamera.enabled = true;
XRSettings.gameViewRenderMode = GameViewRenderMode.None;
}
}
各関数でやっていることは、コメントアウトに記載の通りです。
- カメラコンポーネントの enable を切り替えること
-
XRSettings.gameViewRenderMode
を変更すること
が肝です。
今回のサンプルスクリプトは OnThirdView()
をゲーム起動時に呼んでいるだけですが、任意のタイミングで OnPlayerView()
関数を呼ぶことで、PCディスプレイの表示をプレイヤーの一人称(VRHMDで見えている映像)に戻すことが出来ます。
以下のように、VRHMD側とPC側で異なる映像を出すことが出来ました。
■ VRHMD側
■ PC側
まとめ
この記事では、UnityでVRとPCディスプレイに別のカメラ映像を出力する方法を説明しました。
HMDとPCで別の映像を出すことを活かした、新しい体験が作れるかもしれませんね!
読んでくださりありがとうございました🤗
Discussion