Unity:Oculus Quest / Linkで振動(バイブレーション)を利用する
 
 こんにちは、のんびりエンジニアのたっつーです。
 Twitter(@kingyo222)で Unity情報 を発信しているのでよければフォローしてください!  
目次
初めに
UnityでVRを利用する場合には、Unity標準の仕組みを使ったり、各社が提供しているプラグインを使ってそれぞれのデバイスの制御を行います。
以下、分かりやすい資料がありましたので引用させていただきます。

例えば、Oculus Quest/Link を使用して
コントローラーの振動(バイブレーション)を行いたい場合、以下の3パターンの選択しが存在します。
- Unity(XR InteractionToolKt+Oculusプラグイン)
- Facebook(Oculus Integration+Oculusプラグイン)
- Valve(StreamVR Plugin + OpenVR XRプラグイン)
今回はこの3パターンでそれぞれどのような方法で振動(バイブレーション)が実装できるか確認してみます。
3パターンの方法
参考資料
https://gist.github.com/corycorvus/2b0788719f06fc162a8d5466ba58ac4d
Unity標準での実装
Unity標準的な機能で実装する場合は
InputDeviceを使って、SendHapticImpulse メソッドを呼び出します。
※ ちなみに 周波数(frequency)の設定が無いので、ふり幅(amplitude)のみ設定できます。
    static void HapticPulseUnity() 
    {
        Debug.Log("Haptic Unity");
        InputDevice device = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);
        HapticCapabilities capabilities;
        if (device.TryGetHapticCapabilities(out capabilities))
            if (capabilities.supportsImpulse)
                device.SendHapticImpulse(0, 0.5f, 1.0f);
        device = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);
        if (device.TryGetHapticCapabilities(out capabilities))
            if (capabilities.supportsImpulse)
                device.SendHapticImpulse(0, 0.5f, 1.0f);
    }Facebook(Oculus公式)での実装
Oculusの公式設定です、試していませんが
 周波数(frequency)・ふり幅(amplitude)の2つが設定できます。 
#if PLATFORM_OCULUS
    // https://developer.oculus.com/documentation/unity/unity-haptics/
    static void HapticPulseOculus() 
    {
        Debug.Log("Haptic Oculus");
        OVRInput.SetControllerVibration(1, 1, OVRInput.Controller.RTouch);
        OVRInput.SetControllerVibration(1, 1, OVRInput.Controller.LTouch);
    }
#endifValve(StreamVR Plugin)での実装
StremVR Pluginを使った場合の設定です。
 周波数(frequency)・ふり幅(amplitude)の2つが設定できますが、自分の環境だとどちらも動かなかったです。
※おそらく何かを間違えているためなので通常は動く気がします。
    static void HapticPulseSteam() 
    {
        Debug.Log("Haptic SteamVR");
        SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.LeftHand].Execute(0, 1, 10, 1);
        SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightHand].Execute(0, 1, 10, 1);
        //SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightHand].Execute(0f, 0.5f, 160, 0.5f);
    }よければ、SNSにシェアをお願いします!
