Oculus Touch の振動時間を2秒間固定から可変にする

OVRInput.SetControllerVibration の振動時間は2秒固定

Oculus Integration をインストールすることで,振動処理は以下のOVRInput.SetControllerVibrationで設定できます.

// frequency : 振動数|0~1までの値.値が大きい程振動が強くなる
// amplitude : 振幅|0~1までの値.値が大きい程振動が大きくなる
// controller : 振動させるコントローラ|左コントローラか右コントローラか両方か
OVRInput.SetControllerVibration(frequency, amplitude, controller);

ただSetControllerVibration()は振動開始してから2秒間固定で終了という処理になっています.
これを任意の時間に終了できるようにします.

公式ドキュメント

なんてことはないです.公式ドキュメントによれば,

developer.oculus.com

振動を終了させるには、振幅と振動数の両方を0に設定してください。コントローラーの振動は最後のインプットから2秒後に自動的に終了します。

例えば振動は0.5秒間だけにしたいなら,0.5秒後に振幅と振動数を0にすればいいだけです.

VibrationExtension

拡張クラスっぽいの.

using System.Collections;
using UnityEngine;

/// <summary>
/// 振動処理拡張クラス
/// </summary>
public class VibrationExtension : MonoBehaviour
{
    // Singleton化
    private static VibrationExtension _instance;
    public static VibrationExtension Instance { get; private set; }

    private void Awake()
    {
        if (Instance != null && Instance != this)
        {
            Destroy(this.gameObject);
            return;
        }

        Instance = this;
        DontDestroyOnLoad(gameObject);
    }

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

    IEnumerator VibrateForSeconds(float duration, float frequency, float amplitude, OVRInput.Controller controller)
    {
        // 振動開始
        OVRInput.SetControllerVibration(frequency, amplitude, controller);

        // 振動間隔分待つ
        yield return new WaitForSeconds(duration);

        // 振動終了
        OVRInput.SetControllerVibration(0, 0, controller);
    }
}

呼び出す方法

シングルトンにしたので,以下のように呼べば完了.

VibrationExtension.Instance.VibrateController(0.5f, 1, 0.3f, OVRInput.Controller.LTouch);