VRTK Ver3.2.0から設定方法が変わっています。(2017/07/04追記)
takoyakiroom.hatenablog.com
なんだかPlanet CoasterとFF15で遊んでいるうちに、世間ではSteamVR PluginがVer1.2.0になったり、VRTKがVer3.0.1になったりしてました!
特にVRTKはかなり変わったみたいなので、早速新しくなったVRTKを使ってみましょう。
今回は新しいVRTKでテレポート移動を試すのと、Viveコントローラのバッテリー残量を取得し、VRTKのツールチップの機能で表示させてみようと思います。
最初はSteamVR PluginとVRTKのインポートです。Asset Storeから両者をダウンロード・インポートします。
この2つですね。
インポートが終わったらHierarchyに最初からある「Main Camera」は削除、代わりにStarmVR→Prefabsの[CameraRig]を置きます。
ついでに、床をCubeで作っておきましょう。
VRTK用に空のオブジェクトを作成、オブジェクトの名前は何でも良いです。
そのオブジェクトに、VRTK→Scripts→Utilitiesにある「VRTK_SDKManager」をアタッチ。
Inspactorから「SDK Selection」を「StarmVR」にします。他には「OculusVR」とか「Simulator」とかも選べるみたいです。
んで、下図(1)の「Auto Populate Linked Objects」ボタンを押すと、(2)の部分が自動的に設定されます。
これでSteamVR PluginとVRTKの関連付けが出来たってとこでしょうか。
次はVR上で移動できるようにテレポートの機能を付けてみます。
まずは、移動先を示すポインタをコントローラの操作で表示できるようにする為、コントローラの設定を行います。
左コントローラのスクリプトを入れる為の空のオブジェクトを作成、これまた名前は何でも良いです。
わかりやすいよう、さっき作った「VRTK」の中に突っ込んでまとめておきます。
そして、コントローラを使う為の「VRTK_ControllerEvents」と、ポインタを使う為の「VRTK_SimplePointer」をコントローラ用のオブジェクトに突っ込みます。
「VRTK_ControllerEvents」はVRTK→Scripts→Interactionsの中、「VRTK_SimplePointer」はVRTK→Scripts→Pointersの中にあります。
右のコントローラも同じように作成します。(コピペ→リネームでもOK)
作った2つのコントローラを「VRTK_SDKManager」の「Controller Aliases」のScriptのところに設定します。
よし、動かしてみよー!
OK! タッチパッドのボタンを押すとポインタが表示されます。
移動できるようにするには「VRTK_BasicTelepor」を使います。「VRTK_BasicTelepor」はVRTK→Scripts→Locomotionの中です。
これまた空のオブジェクトを「PlayArea」を作って、アタッチしています。
これは特に空のオブジェクトを作らなくても、例えば最初に作った「VRTK」のオブジェクトにアタッチしてもかまわないかと思います。
「VRTK_BasicTeleport」以外にもいろんな移動方法があるので、気になる方は他のも試してみてください。
動作確認! 画像ではわからないのですが、ちゃんと移動できるようになっています。
最後にコントローラにツールチップを付けて、そこにバッテリー残量を表示させてみましょう。
オブジェクトにツールチップを表示させるのには「VRTK_ObjectTooltip」を使いました。
VRTK→Prefabs→ObjectTooltipを左右のコントローラのオブジェクトにアタッチします。(「ControllerTooltip」じゃないですよ)
TransformのX,Yをちょっとずらして、ツールチップを見やすい位置に移動しときました。
動かすとこんな感じ。
ではバッテリー残量を取得するスクリプトを作成です。
バッテリーの状態はOpenVRの「GetFloatTrackedDeviceProperty」で、引数に「ETrackedDeviceProperty.Prop_DeviceBatteryPercentage_Float」を使って取得できました。
Floatで0~1の値が返ってきます。「1」は充電満タンで「0」は空っぽです。
ちなみに、引数を変えればバッテリー以外のデバイスの情報も取れます。また文字情報を取ってくれる「GetStringTrackedDeviceProperty」もあります。
Battery.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using Valve.VR; using VRTK; public class Battery : MonoBehaviour { public enum LorR { left, right } public LorR type; // Use this for initialization void Start () { } // Update is called once per frame void Update () { ETrackedPropertyError err = 0; CVRSystem cvrSystem = SteamVR.instance.hmd; int deviceIndex = 0; if (type == LorR.left) { deviceIndex = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost); } else { deviceIndex = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost); } // バッテリー残量取得(0~1) float val = cvrSystem.GetFloatTrackedDeviceProperty( (uint)deviceIndex, ETrackedDeviceProperty.Prop_DeviceBatteryPercentage_Float, ref err); // Tooltip更新 VRTK_ObjectTooltip tip = GetComponent<VRTK_ObjectTooltip>(); tip.UpdateText((val*100).ToString("0")+"%"); } }
左右のコントローラにアタッチして完了!
無事バッテリーの状態が取得できました。
尚、残り10%以下になると、実際のコントローラのLEDが赤くなるっぽいです。