はじめに
大学の実験で、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で触る人はぜひ参考にしてください。