(この記事の使用環境: Unity5.5.0f3 Personal、Windows10、SteamVR Plugin 1.2.0、VRTK3.0.1)


VR用アセット「VRTK」の Example 018_CameraRig_FramesPerSecondCounter の解説です。
ヘッドセットの視界にfps(フレーム数 / 秒)を表示するデモです。
SnapCrab_NoName_2017-2-6_10-22-4_No-00

■公式サイトの解説

VRTK公式サイトでこのExampleの解説文及び解説動画を見ることができます。ただし、動画に関してはVRTK旧バージョンのときに作られたものであり、VRTK3.0(以降)では設定等が異なっている場合があることに留意してください。動きを中心に見てもらえれば良いかと思います。

このExampleの解説動画



■VRTKのセットアップ方法および使用されているスクリプトの解説

適宜、以下の記事を参照願います。
  • プレハブ「Frames Per Second Viewer」の解説
      (今後執筆予定)

■Exampleの解説

VRTK/Examples 内にある当該番号のシーンを呼び出すことで、デモを動かしてみることができます。

このデモシーンを起動すると、ヘッドセットの視界中央にfps(フレーム数 / 秒)が表示されます。トリガーボタンを押すと1つの新しいSphereが生成され、タッチパッドを押すと20個の新しいSphereが生成されます。やがて多くのSphereによってfpsは低下するようになります。
SnapCrab_NoName_2017-2-6_10-22-4_No-00

以下、シーンに配置されているオブジェクトについての概要説明です。
  • SphereContainer, SpawnMe: SphereContainer はシーンに配置された青色のカプセル。その下部に置かれた SpawnMe の位置からSphereが生成される。
    SnapCrab_NoName_2017-2-6_10-42-5_No-00

  • Left Controller、RightController: [VRTK] ゲームオブジェクトの下に配置されている、左右のコントローラー用のVRTKスクリプトをアタッチするゲームオブジェクト。VRTK_ControllerEvents と Sphere_Spawner スクリプトがアタッチされている。Sphere_Spawner スクリプトの中身はこんな感じ。(このスクリプト自体にVR要素はありませんが)
    namespace VRTK.Examples
    {
        using UnityEngine;
    
        // --- SphereSpawer(Sphereを生成するスクリプト) -------------------------------------
        public class Sphere_Spawner : MonoBehaviour
        {
            private GameObject spawnMe;
            private Vector3 position;
    
            // --- 初期化 -----------------------------------------------------
            private void Start()
            {
                if (GetComponent<VRTK_ControllerEvents>() == null)
                {
                    Debug.LogError("VRTK_ControllerEvents_ListenerExample is required to be attached to a Controller that has the VRTK_ControllerEvents script attached to it");
                    return;
                }
    
                GetComponent<VRTK_ControllerEvents>().TriggerPressed += new ControllerInteractionEventHandler(DoTriggerPressed);
                GetComponent<VRTK_ControllerEvents>().TouchpadPressed += new ControllerInteractionEventHandler(DoTouchpadPressed);
    
                spawnMe = GameObject.Find("SpawnMe");   // SpawnMe オブジェクトを取得する
                position = spawnMe.transform.position;  // SpawnMe ゲームオブジェクトの位置を取得する(Sphereの生成位置とする)
            }
    
            // --- トリガーボタンが押されたときの処理 ----------------------------------------------
            private void DoTriggerPressed(object sender, ControllerInteractionEventArgs e)
            {
                Invoke("CreateSphere", 0f);         // 即時(0秒後)に CreateSphere メソッドを実行する
            }
    
            // --- タッチパッドが押されたときの処理 ------------------------------------------------
            private void DoTouchpadPressed(object sender, ControllerInteractionEventArgs e)
            {
                for (int i = 0; i < 20; i++)        // 20回繰り返す
                {
                    Invoke("CreateSphere", 0f);     // 即時(0秒後)に CreateSphere メソッドを実行する
                }
            }
    
            // --- CreateSphere メソッド -------------------------------------------
            private void CreateSphere()
            {
                Instantiate(spawnMe, position, Quaternion.identity);    // SpawnMe オブジェクトを元の位置で生成(複製)する
            }
        }
    }
    

  • FramesPerSecondCanvas: ヘッドセットの視界中央にfpsカウンタを表示するプレハブ。その子オブジェクトの FramesPerSecondText のインスペクタで、ターゲットとするfps、フォントサイズ、fpsの範囲に応じたフォント色などを設定できる。
    (※ Good, Warn, Badの範囲は VRTK_FramesPerSecond スクリプト内で定められており、ターゲットfps -5 までがGood、ターゲットfps -30 までがWarn、それ以下がBadとなっている。この範囲を変更する場合はスクリプトを書き換えればよい)
    SnapCrab_NoName_2017-2-6_11-0-34_No-00
今回は以上です。