Viveコントローラーの振動
SteamVR2.0を対象にViveコントローラーの振動実装を備忘録として記録します。
コントローラーにアタッチ
using UnityEngine;
using Valve.VR;
public class Hapic : MonoBehaviour
{
public SteamVR_Input_Sources handType;
public SteamVR_Action_Vibration hapicAction = SteamVR_Input.GetAction<SteamVR_Action_Vibration>("Hapic");
[SerializeField]
bool debug;
//振動の強さ三段階
public enum HapicPower
{
NONE = 0,
WEEK = 1000,
MIDDLE = 2000,
STRONG = 4000
}
void Reset()
{
handType = this.gameObject.GetComponent<SteamVR_Behaviour_Pose>().inputSource;
}
void Update()
{
//デバッグ用 (どんぐらいの強さかな~?)
if (debug)
{
ControllerHaptic(HapicPower.STRONG);
}
}
//振動メソッドたち
//パターン①
public void ControllerHaptic()
{
float seconds = (float)HapicPower.MIDDLE / 1000000f;
hapicAction.Execute(0, seconds, 1f / seconds, 1, handType);
}
//パターン②
public void ControllerHaptic(HapicPower hapicPower)
{
float seconds = (float)hapicPower / 1000000f;
hapicAction.Execute(0, seconds, 1f / seconds, 1, handType);
}
//パターン③
public void ControllerHaptic(ushort microSecondsDuration)
{
float seconds = (float)microSecondsDuration / 1000000f;
hapicAction.Execute(0, seconds, 1f / seconds, 1, handType);
}
}
振動の設定
Execute
の引数に振幅とやら振幅間隔やらいろいろ項目がありますが、
サンプルシーン内でも使用されていた
Execute(0, seconds, 1f / seconds, 1, handType)
が一番使い勝手良いかと思います。
私は変更したい設定として、振動の強さくらいだったので
seconds
の値を変えるだけで十分でした。
オーバーロード
オブジェクト指向の便利機能1だそうです。
オーバーロードとは、「引数や戻り値が異なるが名称が同一のメソッドを複数定義する」というオブジェクト指向プログラミングのテクニックである。
振動の強さに関して、
・決められた値
・決められた値の中から選択
・数字で指定
上記3パターン用意しました。
呼び出す際はこんな感じです。
//パターン①
ControllerHaptic();
//パターン②
ControllerHaptic(HapicPower.STRONG)
//パターン③
ControllerHaptic(3200);