In-game Debug Console アセットをVR内でいい感じに利用できるようにします.
In-game Debug Console とは
その名の通り,実機中にコンソールを表示してくれるアセットです.無料でMITライセンス.
使い方
Import後にHierarchyにIngameDebugConsoleプレハブを置くだけ.終わり.
というのは味気ないので,VR実機中に快適に使えるようにします.
準備
Oculus Integrationをインポート済とします.
適当に土台とデバッグ確認用のボタンを配置します. そして,OVRPlayerControllerプレハブとIngamesDebugsConsoleプレハブを置きます. 今回ボタンをしっかり押しているか視覚的にわかりやすくするために,UIHelpersプレハブを使います.
UIHelpersについてはこちらの記事をご覧ください.
この時点でCanvas生成によって生まれたEventSystem, IngameDebugConsoleのEventSystem,UIHelpersのEventSystemがありますが バッティングしないようここではEventSystemはUIHelpers直下のものだけ残します.
IngameDebugConsoleの設定
こんな感じの設定にしてます.
画面の見ている方向(画面中央あたり)に表示したいので, 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ボタンになる.
実機
Yボタンを押すと見ている方向にConsoleが出るようになります.
UIHelpersを用いて,ボタンとかはBボタンで押せるようにしてます.
VR内で向いている方向にDebug Console出すようにした pic.twitter.com/TQKJDd1Wux
— xrdnk (@xrdnk) 2020年3月30日
勿論Consoleのタブも押せるようになってます.