(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



UnityでOculus Quest(やQuest2)のコントローラーを振動させる方法【Unity】【VR】【Oculus Quest】【Oculus Quest2】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2019.4.14f1
Oculus Integration 20.1


はじめに

今回はUnityでOculus Quest(やQuest2)のコントローラーを振動させる方法の解説記事です!


なお、Oculus Integrationのインストールや、

Oculus Integration | Integration | Unity Asset Store


以下の記事にあるVR上での手の表示等の導入部分は済んでいる前提なのであしからず。



また、コントローラーの入力受け取り方法については以下の記事を参照の事。





OVRInput

さっそくですがコントローラーを振動させるには

Oculus IntegrationのOVRInputというクラスを使います。



実装方法はSetControllerVibrationを実行するだけ。

なお、第1引数で振幅(振動の強さ?)で、第2引数で振動数(振動の大きさ?)を指定します。

//コントローラーを振動させる
OVRInput.SetControllerVibration(frequency:0.1f, amplitude:0.1f);


なお、第3引数で振動させるコントローラーを指定する事も可能です。

(指定しないとアクティブなコントローラーが振動)

//左のコントローラーを振動させる
OVRInput.SetControllerVibration(0.1f, 0.1f, OVRInput.Controller.LTouch);

//右のコントローラーを振動させる
OVRInput.SetControllerVibration(0.1f, 0.1f, OVRInput.Controller.RTouch);


ただし、振動時間は指定出来ないので、振動を止めたいタイミングで

SetControllerVibrationの両引数を0にして止める必要があります。

//コントローラーを振動を止める
OVRInput.SetControllerVibration(0, 0);


例えばコルーチンで実装してみると以下のような感じになります。

/// <summary>
/// Oculus Quest(やQuest2)のコントローラーを振動させる
/// </summary>
public static IEnumerator Vibrate(float duration = 0.1f, float frequency = 0.1f, float amplitude = 0.1f, OVRInput.Controller controller = OVRInput.Controller.Active) {
  //コントローラーを振動させる
  OVRInput.SetControllerVibration(frequency, amplitude, controller);

  //指定された時間待つ
  yield return new WaitForSeconds(duration);

  //コントローラーの振動を止める
  OVRInput.SetControllerVibration(0, 0, controller);
}
//左のコントローラーを0.5秒間振動させる
StartCoroutine(Vibrate(duration:0.5f, controller:OVRInput.Controller.LTouch));