LoginSignup
2
2

Meta Quest3のコントローラーでバイブレーションを実装する方法

Posted at

はじめに

大学の実験で、MetaQuest3を使ったVRゲームを作成したのですが、その際にMetaQuest3にバイブレーションを実装したいと思い、実装方法を調べたのでそれを共有したいと思います。

コード

実装するコード配下の通りです。

VibrationController.cs
using System.Collections;
using UnityEngine;

public class VibrationController : MonoBehaviour
{
    public static VibrationController instance;

    private void Awake()
    {
        instance = this;
    }

    public void StartVibration(float frequency, float amplitude, float duration, OVRInput.Controller controller)
    {
        StartCoroutine(Vibrate(frequency, amplitude, duration, controller));
    }

    private IEnumerator Vibrate(float frequency, float amplitude, float duration, OVRInput.Controller controller)
    {
        OVRInput.SetControllerVibration(frequency, amplitude, controller);
        yield return new WaitForSeconds(duration);
        OVRInput.SetControllerVibration(0, 0, controller); // バイブレーションを停止
    }

}

public static VibrationController instanceと記述することで、オブジェクトにアタッチして一度インスタンスを生成してしまえば、以下のコードのように他のスクリプトから簡単に参照できるようになります。

VibrationController.StartVibration(frequency,amplitude,duration,controller);

StartVibrationで書いているIEnumeratorは、非同期処理(コルーチン)を行わせるために記述しています。

コルーチンとは
任意の箇所で処理をストップさせ、任意のタイミングで処理を行う、他の処理と並行して処理する並列処理(非同期処理)のことを言います。

yield return new WaitForSeconds(duration);で、その後に記述しているOVRInput.SetControllerVibration(0, 0, controller);の実行を遅らせています。

最後に

MetaQuest3でVRをunityで触る人はぜひ参考にしてください。

2
2
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
2
2