MRが楽しい

MRやVRについて学習したことを書き残す

Quest3アプリでシーンモデルが利用できないときは疑似床に切り替える

本日はMetaQuest3の小ネタ枠です。
Quest3アプリでシーンモデルが利用できないときは疑似床に切り替える方法を記事にします。

前提条件

本記事では以下の記事で作成したシーンモデルの可視化を設定したプロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com

シーンモデルが利用できないときは疑似床に切り替える

サンプルシーンにあらかじめ疑似床オブジェクトを配置し、シーンモデルが利用できない場合はこちらの床を利用するようにします。

シーンモデルが利用可能か否かはMRUKのRoomCreatedEventで取得したルーム情報から判断可能です。
アプリ起動時にプレイヤーがシーンモデル内にいない場合のみ疑似床オブジェクトを無効化する以下のサンプルスクリプトを作成しました。
・PlaneControl.cs

using Meta.XR.MRUtilityKit;
using UnityEngine;

public class PlaneControl : MonoBehaviour
{
    /// <summary>
    /// 疑似床オブジェクト
    /// </summary>
    [SerializeField]
    private GameObject planeObject;
    
    public void CheckRoomCreatedEvent(MRUKRoom roomInfo)
    {
        // メインカメラがルーム内にいるかどうかを確認する
        if (roomInfo.IsPositionInRoom(Camera.main.transform.position))
        {
            // シーンモデルのルーム内にいる場合は、疑似床オブジェクトを無効化する
            planeObject.SetActive(false);
        }
    }
}

MRUKのRoomCreatedEventイベントにサンプルスクリプトの参照を設定して準備は完了です。

ビルドと動作確認

以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行します。
bluebirdofoz.hatenablog.com

シーンモデルのスキャンを行った部屋でアプリを起動します。
プレイヤーがシーンモデル内にいるときは疑似床オブジェクトが無効化され、シーンモデルのみ有効になります。

次にスキャンを行っていない場所でアプリを起動します。
この場合は疑似床オブジェクトが無効化されずにアプリを利用できます。