読者です 読者をやめる 読者になる 読者になる

ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

UnityでHTC Viveのスタンバイイベントを受け取る

こんにちは!VR事業部の長谷川(id:waffle_maker)です。今回はUnityでHTC Viveのスタンバイイベントを受け取る方法について紹介します。

はじめに

スタンバイモードとは?

ヘッドセットをテーブルに置くなどして一定時間が経過すると、バックライトやヘッドフォンを切って消費電力を抑える状態になります。

ヘッドセットを見ると、バックライトが消えていることが確認できます。

youtu.be

SteamVRステータスモニタ上では、以下の様にスタンバイモードへの移行を確認できます。

f:id:waffle_maker:20170503025239p:plain f:id:waffle_maker:20170503025227p:plain

今回はこのスタンバイモードの開始と終了イベントを受け取ってみまます。

バージョン情報など

各種バージョン情報は以下の通りです。

HTC Viveの購入はこちら

実際に試してみる

  1. 新規プロジェクトを作成し、SteamVR Pluginをインポートします。

  2. Main Cameraを削除し、[CameraRig]プレハブをシーンに配置します。

  3. StanbyModeDetectorゲームオブジェクトを作成し、下記スクリプトをアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StanbyModeDetector : MonoBehaviour {

    // Use this for initialization
    void Start () {
        SteamVR_Events.System(Valve.VR.EVREventType.VREvent_EnterStandbyMode).Listen((Valve.VR.VREvent_t args) => {
            Debug.Log("スタンバイモード開始");
        });
        SteamVR_Events.System(Valve.VR.EVREventType.VREvent_LeaveStandbyMode).Listen((Valve.VR.VREvent_t args) => {
            Debug.Log("スタンバイモード終了");
        });
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}

実行してヘッドセットを机に置いて10秒ほどでスタンバイモードに移行して開始ログが出力されました! その後、ヘッドセットを動かしたら終了ログが出力されました!

f:id:waffle_maker:20170503032614p:plain

トラブルシューティング

  • [CameraRig]を使用しない場合は、イベントを検出できないようです。

SteamVR Pluginがちょっと古い場合

下記バージョンではイベントの取得方法が異なりました。

取得方法は以下の様な感じです。

SteamVR_Utils.Event.Listen("EnterStandbyMode", (object[] args) => {
    Debug.Log("スタンバイモード開始");
});
SteamVR_Utils.Event.Listen("LeaveStandbyMode", (object[] args) => {
    Debug.Log("スタンバイモード終了");
});

まとめ

このようにスタンバイモードの検出ができると、色々と活用できそうです。

例えば・・・

  • 普段はPVを再生しておき、ヘッドセットを被ったらコンテンツを開始する。
  • ヘッドセットを被ったら愛犬が走り寄って来る。

また、EVREventType列挙型には他にも多数のイベントが定義されていますので、調べて見るのも良いと思います。

面白い活用方法を思いついた方は是非こっそり教えて下さい!

*1:SteamVR Pluginの旧バージョンを入手したい場合は、githubからどうぞ。