In-game Debug Console を用いてVR実機中にConsoleをいい感じに表示する


In-game Debug Console アセットをVR内でいい感じに利用できるようにします.

In-game Debug Console とは

その名の通り,実機中にコンソールを表示してくれるアセットです.無料でMITライセンス.

kan-kikuchi.hatenablog.com

baba-s.hatenablog.com

使い方

Import後にHierarchyにIngameDebugConsoleプレハブを置くだけ.終わり.

というのは味気ないので,VR実機中に快適に使えるようにします.

準備

Oculus Integrationをインポート済とします.

適当に土台とデバッグ確認用のボタンを配置します.
そして,OVRPlayerControllerプレハブとIngamesDebugsConsoleプレハブを置きます.
今回ボタンをしっかり押しているか視覚的にわかりやすくするために,UIHelpersプレハブを使います.

UIHelpersについてはこちらの記事をご覧ください.

qiita.com

この時点でCanvas生成によって生まれたEventSystem,
IngameDebugConsoleのEventSystem,UIHelpersのEventSystemがありますが
バッティングしないようここではEventSystemはUIHelpers直下のものだけ残します.

f:id:xrdnk:20200330225904p:plain

IngameDebugConsoleの設定

こんな感じの設定にしてます.

f:id:xrdnk:20200330225619p:plain

画面の見ている方向(画面中央あたり)に表示したいので,
CanvasのRendor ModeをWorld Spaceにし,Event CameraはCenterEyeAnchorに設定します.

VR内なので,Graphic Raycasterを無効にする代わりに,OVR Raycasterスクリプトをアタッチしてます.

Debug Log Manager スクリプトの改造

DebugLogManager.csを改造します.

#pragma warning restore 0649の上に,以下のスクリプトを書きます.
(privateフィールドリージョンの上と言ったほうがいいか.)

        // NOTE : VR実装用
        [Header("VR実装用")]
        [SerializeField, Tooltip("OVRCameraRigをアタッチ")]
        private GameObject ovrCameraRig;
        [SerializeField, Tooltip("コンソールを開くボタン")]
        private OVRInput.Button toggleButtonforVR;

450~500行目あたりにある,public void ShowLogWindow()の上に,以下のスクリプトを書きます.

        /// <summary>
        /// Debug Console の位置を調整する
        /// </summary>
        private void AdjustDebugConsolePosition()
        {
            // OVRCameraRigがアタッチされていなかった場合,Findする
            if (ovrCameraRig == null)
            {
                ovrCameraRig = GameObject.Find("OVRCameraRig");
            }
            // CenterEyeAnchorを親にする
            transform.SetParent(ovrCameraRig.transform.Find("TrackingSpace/CenterEyeAnchor"));

            // 親オブジェクトとの相対座標値の設定
            transform.localPosition = new Vector3(0, 0, 5);
            transform.localRotation = Quaternion.Euler(Vector3.zero);

            // 絶対座標軸上の座標値の設定
            Vector3 originalPos = transform.position;
            Quaternion originalRot = transform.rotation;

            // z回転を0に設定することで,Debug Console の向きを調整し,読みやすい状態にする
            originalRot = Quaternion.Euler(originalRot.eulerAngles.x, originalRot.eulerAngles.y, 0.0f);

            // 再設定
            transform.SetParent(null);
            transform.position = originalPos;
            transform.rotation = originalRot;
        }

最後に,LateUpdate()内にある if(toggleWithKey)ブロック内のスクリプトを改造します.

            if (toggleWithKey)
            {
                // NOTE : コンソールを開く条件に左手のTouchのボタンを押した場合を加えた
                if (Input.GetKeyDown(toggleKey) || OVRInput.GetDown(toggleButtonforVR, OVRInput.Controller.LTouch))
                {
                    // NOTE : 位置調整を加えた
                    AdjustDebugConsolePosition();

                    if (isLogWindowVisible)
                        ShowPopup();
                    else
                        ShowLogWindow();
                }
            }

スクリプト改変後,Inspectorウィンドウにて,Toggle KeyをTab,OVR Camera RigにOVRCameraRigプレハブを,
Toggle Buttonfor VRを今回ではTwo(if文でLTouchを条件にしたのでここではYボタンのこと)にした.

ちなみにRTouchの場合,Twoに設定すると,Bボタンになる.

f:id:xrdnk:20200330231204p:plain

実機

Yボタンを押すと見ている方向にConsoleが出るようになります.
UIHelpersを用いて,ボタンとかはBボタンで押せるようにしてます.

勿論Consoleのタブも押せるようになってます.