LoginSignup
0
1

More than 3 years have passed since last update.

【Unity(C#)】Viveコントローラーの振動実装(SteamVR2.0)

Last updated at Posted at 2019-05-20

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);
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1