Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

Bug Haptic binding not avaliable for HP Reverb G2

Discussion in 'XR Interaction Toolkit and Input' started by Reahreic, Oct 5, 2022.

  1. Reahreic

    Reahreic

    Joined:
    Mar 23, 2011
    Posts:
    254
    I've got haptics functioning nicely for VIVE Pro controllers using Unity 2022.1.16 and the new Input system (1.4.2), but when I perform the same configuration steps to add haptic support for HP Reverb G2 controllers, there's no binding available for them. (They certainly do have the physical capability as they pulse for various reasons outside of unity.)

    Theoretically, it should be '<HPMixedRealityController>{RightHand}/haptic' but that's not available via the dropdown, and doesn't resolve when manually entered.

    The official MSFT doc on the matter just point to the Unity docs for the short-lived 2018 'UnityEngine.XR.InputDevices' implementation.


    //What I use to trigger a basic haptic pulse
    Code (CSharp):
    1.  
    2. //Populaed when UnityEngine.InputSystem.InputSystem.onDeviceChange is dispatched.
    3. UnityEngine.InputSystem.InputDevice device;
    4.  
    5. //Populaed when UnityEngine.InputSystem.InputSystem.onDeviceChange is dispatched.
    6. UnityEngine.InputSystem.InputAction hapticAction;
    7.  
    8. //Called to test a pulse
    9. public void PulseHaptic(float amplitude) {
    10.     if(hapticAction == null) {
    11.         Debug.LogWarning("The controller '" + this + "' does not have a bound haptic action!");
    12.         return;
    13.     }
    14.  
    15.     amplitude = Mathf.Clamp01(amplitude);
    16.    
    17.     //Works for VIVE Pro, not HP Reverb G2 (frequency tested at 10, 50, 100, 500)
    18.     UnityEngine.InputSystem.XR.OpenXRInput.SendHapticImpulse(hapticAction,
    19.         amplitude,
    20.         10f,
    21.         1.0f,
    22.         device);
    23.    
    24.     //Alternate, Works for VIVE Pro, not HP Reverb G2 (frequency tested at 10, 50, 100, 500)
    25.     UnityEngine.InputSystem.XR.OpenXRInput.SendHapticImpulse(hapticAction,
    26.         amplitude,
    27.         10f,
    28.         1.0f,
    29.         UnityEngine.InputSystem.XR.XRController.rightHand);
    30. }
    31.  
    The Input Actions Schema & Maps
    Code (CSharp):
    1. {
    2.     "name": "InputActions",
    3.     "maps": [
    4.         {
    5.             "name": "RightController",
    6.             "id": "1b6300a3-2abc-40ce-8a40-56d5f65965fe",
    7.             "actions": [
    8.                 {
    9.                     "name": "Position",
    10.                     "type": "Value",
    11.                     "id": "eee129a9-49d8-469b-83e4-8bb77849eb8c",
    12.                     "expectedControlType": "Vector3",
    13.                     "processors": "",
    14.                     "interactions": "",
    15.                     "initialStateCheck": true
    16.                 },
    17.                 {
    18.                     "name": "Rotation",
    19.                     "type": "PassThrough",
    20.                     "id": "a0c5a7ae-c6d7-4623-9f03-8cdb35443195",
    21.                     "expectedControlType": "Quaternion",
    22.                     "processors": "",
    23.                     "interactions": "",
    24.                     "initialStateCheck": false
    25.                 },
    26.                 {
    27.                     "name": "Trigger",
    28.                     "type": "Value",
    29.                     "id": "b8d6264f-7ca3-4c99-90a5-67b246030b8e",
    30.                     "expectedControlType": "",
    31.                     "processors": "",
    32.                     "interactions": "",
    33.                     "initialStateCheck": true
    34.                 },
    35.                 {
    36.                     "name": "TriggerBtn",
    37.                     "type": "Button",
    38.                     "id": "533a5202-01ad-47ff-9134-6588782d46c6",
    39.                     "expectedControlType": "Button",
    40.                     "processors": "",
    41.                     "interactions": "Press(behavior=1)",
    42.                     "initialStateCheck": false
    43.                 },
    44.                 {
    45.                     "name": "TriggerBtnHeld",
    46.                     "type": "Button",
    47.                     "id": "674c4a9e-df1c-4dca-b8fe-a1365e1ad9f2",
    48.                     "expectedControlType": "Button",
    49.                     "processors": "",
    50.                     "interactions": "Hold",
    51.                     "initialStateCheck": false
    52.                 },
    53.                 {
    54.                     "name": "PrimaryBtn",
    55.                     "type": "Button",
    56.                     "id": "d8a081ac-f1e7-458d-baf3-32481ceb7a7c",
    57.                     "expectedControlType": "Button",
    58.                     "processors": "",
    59.                     "interactions": "Press(behavior=1)",
    60.                     "initialStateCheck": false
    61.                 },
    62.                 {
    63.                     "name": "PrimaryBtnHeld",
    64.                     "type": "Button",
    65.                     "id": "72ce8707-bef5-4b0d-b08e-9255964c4b0f",
    66.                     "expectedControlType": "Button",
    67.                     "processors": "",
    68.                     "interactions": "Hold",
    69.                     "initialStateCheck": false
    70.                 },
    71.                 {
    72.                     "name": "SecondaryBtn",
    73.                     "type": "Button",
    74.                     "id": "ebc2fff2-12d6-4e9d-9626-9c3ecaa427be",
    75.                     "expectedControlType": "Button",
    76.                     "processors": "",
    77.                     "interactions": "Press(behavior=1)",
    78.                     "initialStateCheck": false
    79.                 },
    80.                 {
    81.                     "name": "SecondaryBtnHeld",
    82.                     "type": "Button",
    83.                     "id": "e5f81192-3974-4c7e-9f72-442033c1c971",
    84.                     "expectedControlType": "Button",
    85.                     "processors": "",
    86.                     "interactions": "Hold",
    87.                     "initialStateCheck": false
    88.                 },
    89.                 {
    90.                     "name": "GripTrigger",
    91.                     "type": "Value",
    92.                     "id": "a4fe10d3-bab7-4208-84d9-1fa050f86d2a",
    93.                     "expectedControlType": "Axis",
    94.                     "processors": "",
    95.                     "interactions": "",
    96.                     "initialStateCheck": true
    97.                 },
    98.                 {
    99.                     "name": "GripBtn",
    100.                     "type": "Button",
    101.                     "id": "b98d1ac7-a28d-4b01-b234-5090cc036542",
    102.                     "expectedControlType": "Button",
    103.                     "processors": "",
    104.                     "interactions": "Press(behavior=1)",
    105.                     "initialStateCheck": false
    106.                 },
    107.                 {
    108.                     "name": "GripBtnHeld",
    109.                     "type": "Button",
    110.                     "id": "f6950bea-e54d-4e21-a7b1-e440c8aa67bd",
    111.                     "expectedControlType": "Button",
    112.                     "processors": "",
    113.                     "interactions": "Hold",
    114.                     "initialStateCheck": false
    115.                 },
    116.                 {
    117.                     "name": "MenuBtn",
    118.                     "type": "Button",
    119.                     "id": "48784f00-33e5-4daa-be5e-549402866ffa",
    120.                     "expectedControlType": "Button",
    121.                     "processors": "",
    122.                     "interactions": "Press(behavior=1)",
    123.                     "initialStateCheck": false
    124.                 },
    125.                 {
    126.                     "name": "MenuBtnHeld",
    127.                     "type": "Button",
    128.                     "id": "9e837c98-3ad0-4a3b-a2d6-f8b1b9861eb2",
    129.                     "expectedControlType": "Button",
    130.                     "processors": "",
    131.                     "interactions": "Hold",
    132.                     "initialStateCheck": false
    133.                 },
    134.                 {
    135.                     "name": "TPadTouch",
    136.                     "type": "Button",
    137.                     "id": "e867f016-ca47-47bf-b736-e4fd5d789c49",
    138.                     "expectedControlType": "Button",
    139.                     "processors": "",
    140.                     "interactions": "",
    141.                     "initialStateCheck": false
    142.                 },
    143.                 {
    144.                     "name": "TPad",
    145.                     "type": "Button",
    146.                     "id": "097bde5e-6145-4658-8695-40182d6f1c68",
    147.                     "expectedControlType": "Button",
    148.                     "processors": "",
    149.                     "interactions": "",
    150.                     "initialStateCheck": false
    151.                 },
    152.                 {
    153.                     "name": "JoyStick",
    154.                     "type": "Value",
    155.                     "id": "b79fdc02-8a48-40bc-b5ba-d7b958fa78c8",
    156.                     "expectedControlType": "Vector2",
    157.                     "processors": "",
    158.                     "interactions": "",
    159.                     "initialStateCheck": true
    160.                 },
    161.                 {
    162.                     "name": "JoyStickBtn",
    163.                     "type": "Button",
    164.                     "id": "314b3b32-752f-408c-9893-789c6a11f275",
    165.                     "expectedControlType": "Button",
    166.                     "processors": "",
    167.                     "interactions": "Press(behavior=1)",
    168.                     "initialStateCheck": false
    169.                 },
    170.                 {
    171.                     "name": "JoyStickBtnHeld",
    172.                     "type": "Button",
    173.                     "id": "f67ea0a8-1937-4553-a951-3b5695038a91",
    174.                     "expectedControlType": "Button",
    175.                     "processors": "",
    176.                     "interactions": "Hold",
    177.                     "initialStateCheck": false
    178.                 },
    179.                 {
    180.                     "name": "Haptic",
    181.                     "type": "PassThrough",
    182.                     "id": "1046b868-5318-4af0-9c93-9a2884b18b1f",
    183.                     "expectedControlType": "Haptic",
    184.                     "processors": "",
    185.                     "interactions": "",
    186.                     "initialStateCheck": true
    187.                 }
    188.             ],
    189.             "bindings": [
    190.                 {
    191.                     "name": "",
    192.                     "id": "8de5062c-4772-4f6f-b9cb-779dccb5da25",
    193.                     "path": "<XRController>{RightHand}/devicePosition",
    194.                     "interactions": "",
    195.                     "processors": "",
    196.                     "groups": "GenericXRController;VIVE Pro;HP Reverb G2 - XR",
    197.                     "action": "Position",
    198.                     "isComposite": false,
    199.                     "isPartOfComposite": false
    200.                 },
    201.                 {
    202.                     "name": "",
    203.                     "id": "1d1f5fbb-7af3-4cda-a4a9-3818f8a43364",
    204.                     "path": "<XRController>{RightHand}/deviceRotation",
    205.                     "interactions": "",
    206.                     "processors": "",
    207.                     "groups": "GenericXRController;HP Reverb G2 - XR;VIVE Pro",
    208.                     "action": "Rotation",
    209.                     "isComposite": false,
    210.                     "isPartOfComposite": false
    211.                 },
    212.                 {
    213.                     "name": "",
    214.                     "id": "86bdf087-dee9-4390-8fe2-0c510762f377",
    215.                     "path": "<XRController>{RightHand}/trigger",
    216.                     "interactions": "",
    217.                     "processors": "",
    218.                     "groups": "VIVE Pro;HP Reverb G2 - XR;GenericXRController",
    219.                     "action": "Trigger",
    220.                     "isComposite": false,
    221.                     "isPartOfComposite": false
    222.                 },
    223.                 {
    224.                     "name": "",
    225.                     "id": "31d0b222-728b-4bf1-80a6-2f2d98853073",
    226.                     "path": "<XRController>{RightHand}/triggerPressed",
    227.                     "interactions": "",
    228.                     "processors": "",
    229.                     "groups": "HP Reverb G2 - XR;GenericXRController",
    230.                     "action": "TriggerBtn",
    231.                     "isComposite": false,
    232.                     "isPartOfComposite": false
    233.                 },
    234.                 {
    235.                     "name": "",
    236.                     "id": "69a970e4-938e-4d45-8668-017ae964eb0e",
    237.                     "path": "<ViveController>{RightHand}/trackpadClicked",
    238.                     "interactions": "",
    239.                     "processors": "",
    240.                     "groups": "VIVE Pro",
    241.                     "action": "SecondaryBtn",
    242.                     "isComposite": false,
    243.                     "isPartOfComposite": false
    244.                 },
    245.                 {
    246.                     "name": "",
    247.                     "id": "318d1ec4-a44b-4d1a-8549-b373cb0e603a",
    248.                     "path": "<XRController>{RightHand}/secondaryButton",
    249.                     "interactions": "",
    250.                     "processors": "",
    251.                     "groups": "GenericXRController;HP Reverb G2 - XR",
    252.                     "action": "SecondaryBtn",
    253.                     "isComposite": false,
    254.                     "isPartOfComposite": false
    255.                 },
    256.                 {
    257.                     "name": "",
    258.                     "id": "061614ba-2477-44ba-a062-c7273fa41004",
    259.                     "path": "<HPMixedRealityController>{RightHand}/thumbstick",
    260.                     "interactions": "",
    261.                     "processors": "",
    262.                     "groups": "HP Reverb G2 - XR",
    263.                     "action": "JoyStick",
    264.                     "isComposite": false,
    265.                     "isPartOfComposite": false
    266.                 },
    267.                 {
    268.                     "name": "",
    269.                     "id": "aefc4e5f-a15e-4215-8427-3e64cb0a46ec",
    270.                     "path": "<HPMixedRealityController>{RightHand}/thumbstickClicked",
    271.                     "interactions": "",
    272.                     "processors": "",
    273.                     "groups": "HP Reverb G2 - XR",
    274.                     "action": "JoyStickBtn",
    275.                     "isComposite": false,
    276.                     "isPartOfComposite": false
    277.                 },
    278.                 {
    279.                     "name": "",
    280.                     "id": "0cf8d350-2dc6-441b-bb0c-c35f50fb00e3",
    281.                     "path": "<XRController>{RightHand}/haptic",
    282.                     "interactions": "",
    283.                     "processors": "",
    284.                     "groups": "HP Reverb G2 - XR;GenericXRController",
    285.                     "action": "Haptic",
    286.                     "isComposite": false,
    287.                     "isPartOfComposite": false
    288.                 },
    289.                 {
    290.                     "name": "",
    291.                     "id": "2fc6e254-2a16-414c-afbf-db5a7cf538de",
    292.                     "path": "<ViveController>{RightHand}/haptic",
    293.                     "interactions": "",
    294.                     "processors": "",
    295.                     "groups": "VIVE Pro",
    296.                     "action": "Haptic",
    297.                     "isComposite": false,
    298.                     "isPartOfComposite": false
    299.                 },
    300.                 {
    301.                     "name": "",
    302.                     "id": "8ffe9a4b-e0ba-4c3d-9ce4-69b207e9cb5e",
    303.                     "path": "<HPMixedRealityController>{RightHand}/thumbstickClicked",
    304.                     "interactions": "",
    305.                     "processors": "",
    306.                     "groups": "HP Reverb G2 - XR",
    307.                     "action": "JoyStickBtnHeld",
    308.                     "isComposite": false,
    309.                     "isPartOfComposite": false
    310.                 },
    311.                 {
    312.                     "name": "",
    313.                     "id": "27d8210a-780f-4596-8638-d0a4ba653ed6",
    314.                     "path": "<XRController>{RightHand}/triggerPressed",
    315.                     "interactions": "",
    316.                     "processors": "",
    317.                     "groups": "HP Reverb G2 - XR;GenericXRController",
    318.                     "action": "TriggerBtnHeld",
    319.                     "isComposite": false,
    320.                     "isPartOfComposite": false
    321.                 },
    322.                 {
    323.                     "name": "",
    324.                     "id": "b79ed51e-b9ed-41e7-9a15-dace18c14882",
    325.                     "path": "<ViveController>{RightHand}/triggerPressed",
    326.                     "interactions": "",
    327.                     "processors": "",
    328.                     "groups": "VIVE Pro",
    329.                     "action": "PrimaryBtnHeld",
    330.                     "isComposite": false,
    331.                     "isPartOfComposite": false
    332.                 },
    333.                 {
    334.                     "name": "",
    335.                     "id": "0d9b8311-a30d-414b-8b0c-febcebb1ee6b",
    336.                     "path": "<XRController>{RightHand}/primaryButton",
    337.                     "interactions": "",
    338.                     "processors": "",
    339.                     "groups": "GenericXRController;HP Reverb G2 - XR",
    340.                     "action": "PrimaryBtnHeld",
    341.                     "isComposite": false,
    342.                     "isPartOfComposite": false
    343.                 },
    344.                 {
    345.                     "name": "",
    346.                     "id": "5dc22179-89ba-4718-a891-16e2ed56f718",
    347.                     "path": "<ViveController>{RightHand}/trackpadClicked",
    348.                     "interactions": "",
    349.                     "processors": "",
    350.                     "groups": "VIVE Pro",
    351.                     "action": "SecondaryBtnHeld",
    352.                     "isComposite": false,
    353.                     "isPartOfComposite": false
    354.                 },
    355.                 {
    356.                     "name": "",
    357.                     "id": "c8554669-cdab-4288-9ba3-733d56813a2c",
    358.                     "path": "<XRController>{RightHand}/secondaryButton",
    359.                     "interactions": "",
    360.                     "processors": "",
    361.                     "groups": "GenericXRController;HP Reverb G2 - XR",
    362.                     "action": "SecondaryBtnHeld",
    363.                     "isComposite": false,
    364.                     "isPartOfComposite": false
    365.                 },
    366.                 {
    367.                     "name": "",
    368.                     "id": "a2c2cd5d-b27c-42a9-a247-b50224181073",
    369.                     "path": "<ViveController>{RightHand}/trackpadTouched",
    370.                     "interactions": "",
    371.                     "processors": "",
    372.                     "groups": "VIVE Pro",
    373.                     "action": "TPadTouch",
    374.                     "isComposite": false,
    375.                     "isPartOfComposite": false
    376.                 },
    377.                 {
    378.                     "name": "",
    379.                     "id": "7bc92b46-08a6-4fce-936f-daad33c411a9",
    380.                     "path": "<XRController>{RightHand}/gripPressed",
    381.                     "interactions": "",
    382.                     "processors": "",
    383.                     "groups": "GenericXRController;VIVE Pro;HP Reverb G2 - XR",
    384.                     "action": "GripBtnHeld",
    385.                     "isComposite": false,
    386.                     "isPartOfComposite": false
    387.                 },
    388.                 {
    389.                     "name": "",
    390.                     "id": "95c1329b-bd85-4917-9fbb-6cbf27077ce8",
    391.                     "path": "<XRController>{RightHand}/menu",
    392.                     "interactions": "",
    393.                     "processors": "",
    394.                     "groups": "GenericXRController;VIVE Pro;HP Reverb G2 - XR",
    395.                     "action": "MenuBtnHeld",
    396.                     "isComposite": false,
    397.                     "isPartOfComposite": false
    398.                 },
    399.                 {
    400.                     "name": "",
    401.                     "id": "faebae6a-fc17-4d44-b10e-26995c33e2b7",
    402.                     "path": "<XRController>{RightHand}/menu",
    403.                     "interactions": "",
    404.                     "processors": "",
    405.                     "groups": "GenericXRController;VIVE Pro;HP Reverb G2 - XR",
    406.                     "action": "MenuBtn",
    407.                     "isComposite": false,
    408.                     "isPartOfComposite": false
    409.                 },
    410.                 {
    411.                     "name": "",
    412.                     "id": "fa081314-1274-48da-96dc-c7e15bca3307",
    413.                     "path": "<XRController>{RightHand}/gripPressed",
    414.                     "interactions": "",
    415.                     "processors": "",
    416.                     "groups": "GenericXRController;VIVE Pro;HP Reverb G2 - XR",
    417.                     "action": "GripBtn",
    418.                     "isComposite": false,
    419.                     "isPartOfComposite": false
    420.                 },
    421.                 {
    422.                     "name": "",
    423.                     "id": "10779db5-4c15-43ca-b52d-58d2a208162f",
    424.                     "path": "<ViveController>{RightHand}/trackpad",
    425.                     "interactions": "",
    426.                     "processors": "",
    427.                     "groups": "VIVE Pro",
    428.                     "action": "TPad",
    429.                     "isComposite": false,
    430.                     "isPartOfComposite": false
    431.                 },
    432.                 {
    433.                     "name": "",
    434.                     "id": "74dae1eb-96c2-44ba-9066-d87ce7d990d6",
    435.                     "path": "<HPMixedRealityController>{RightHand}/grip",
    436.                     "interactions": "",
    437.                     "processors": "",
    438.                     "groups": "HP Reverb G2 - XR",
    439.                     "action": "GripTrigger",
    440.                     "isComposite": false,
    441.                     "isPartOfComposite": false
    442.                 },
    443.                 {
    444.                     "name": "",
    445.                     "id": "7a082a37-0ce0-4e9f-bd55-6259b0530e71",
    446.                     "path": "<ViveController>{RightHand}/triggerPressed",
    447.                     "interactions": "",
    448.                     "processors": "",
    449.                     "groups": "VIVE Pro",
    450.                     "action": "PrimaryBtn",
    451.                     "isComposite": false,
    452.                     "isPartOfComposite": false
    453.                 },
    454.                 {
    455.                     "name": "",
    456.                     "id": "e4f637a9-aba2-400d-bddc-0253cf9a580b",
    457.                     "path": "<XRController>{RightHand}/primaryButton",
    458.                     "interactions": "",
    459.                     "processors": "",
    460.                     "groups": "GenericXRController;HP Reverb G2 - XR",
    461.                     "action": "PrimaryBtn",
    462.                     "isComposite": false,
    463.                     "isPartOfComposite": false
    464.                 }
    465.             ]
    466.         }
    467.     ],
    468.     "controlSchemes": [
    469.         {
    470.             "name": "HP Reverb G2 - XR",
    471.             "bindingGroup": "HP Reverb G2 - XR",
    472.             "devices": [
    473.                 {
    474.                     "devicePath": "<XRController>",
    475.                     "isOptional": false,
    476.                     "isOR": false
    477.                 }
    478.             ]
    479.         },
    480.         {
    481.             "name": "VIVE Pro",
    482.             "bindingGroup": "VIVE Pro",
    483.             "devices": [
    484.                 {
    485.                     "devicePath": "<ViveController>",
    486.                     "isOptional": false,
    487.                     "isOR": false
    488.                 }
    489.             ]
    490.         },
    491.         {
    492.             "name": "GenericXRController",
    493.             "bindingGroup": "GenericXRController",
    494.             "devices": [
    495.                 {
    496.                     "devicePath": "<XRController>",
    497.                     "isOptional": true,
    498.                     "isOR": false
    499.                 }
    500.             ]
    501.         }
    502.     ]
    503. }
     
  2. Reahreic

    Reahreic

    Joined:
    Mar 23, 2011
    Posts:
    254
    Upon further digging, it looks as though the HP Reverb G2 Controller Profile from MSFT's Mixed Reality OpenXR Plugin (1.4.2) is misconfigured.

    @yl-msft can you verify if what I'm seeing is correct?

    Specifically, it looks as though the profile is missing the following declarations:

    Before the 'protected override void FinishSetup()' method declaration ~Line 154
    Code (CSharp):
    1.  
    2. /// <summary>
    3. /// A <see cref="HapticControl"/> that represents the <see cref="HTCViveControllerProfile.haptic"/> binding.
    4. /// </summary>
    5. [Preserve, InputControl(usage = "Haptic")]
    6. public HapticControl haptic { get; private set; }
    7.  
    Within the 'protected override void FinishSetup()' method declaration ~Line 178
    Code (CSharp):
    1. haptic = GetChildControl<HapticControl>("haptic");
    At the end of the ActionMap declaration, usages isn't set, and the name and localized name read vibrate.
    Code (CSharp):
    1.  
    2. // Haptics
    3. new ActionConfig()
    4. {
    5.     name = "haptic",
    6.     localizedName = "Haptic Output",
    7.     type = ActionType.Vibrate,
    8.     usages = new List<string>() { "Haptic" },
    9.     bindings = new List<ActionBinding>()
    10.     {
    11.         new ActionBinding()
    12.     {
    13.     interactionPath = haptic,
    14.     interactionProfileName = profile,
    15. }
    16.  
    I created a custom profile based off Microsoft profile and added the changes which resulted in functional haptics.
     
  3. surnameforename

    surnameforename

    Joined:
    Sep 9, 2017
    Posts:
    2
    Thank you so much for posting this - I had exactly the same problem with no Reverb G2 haptics (which I could get to work occasionally by adding/removing controller types in Unity, but it was never consistent). For anyone else seeing this the file I edited is:

    com.microsoft.mixedreality.openxr-1.6.0\package\Runtime\FeaturePlugins\HPMixedRealityControllerProfile.cs

    and I tested it with the 1.6.0 version of the package (obvs!) and used 7-zip for the unzip rezip.
     
  4. Reahreic

    Reahreic

    Joined:
    Mar 23, 2011
    Posts:
    254
    No problem, glad to know it helped, If you encounter more oddities with WMR haptics, I have a GitHub ticket open on this topic that the Microsoft dev team are looking into, hopefully it'll be patched in the coming months.

    FYI, G2 haptics are stronger than the Vive's weak pulsing, as such you may want to have 'device specific' strengths to make them feel similar. The added bonus is that running the G2 haptics at a weaker level will reduce battery consumption.