Oculus Touch の振動時間を2秒間固定から可変にする
OVRInput.SetControllerVibration の振動時間は2秒固定
Oculus Integration をインストールすることで,振動処理は以下のOVRInput.SetControllerVibrationで設定できます.
// frequency : 振動数|0~1までの値.値が大きい程振動が強くなる // amplitude : 振幅|0~1までの値.値が大きい程振動が大きくなる // controller : 振動させるコントローラ|左コントローラか右コントローラか両方か OVRInput.SetControllerVibration(frequency, amplitude, controller);
ただSetControllerVibration()は振動開始してから2秒間固定で終了という処理になっています. これを任意の時間に終了できるようにします.
公式ドキュメント
なんてことはないです.公式ドキュメントによれば,
振動を終了させるには、振幅と振動数の両方を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);