SteamVR on Viveport missing controller bindings (Unity)

1.1k views Asked by At

I have frequent reports from users playing my game on Viveport that their controllers are not working. I believe this is due to missing controller bindings. When I test the game on Viveport it works fine for me.

The default bindings have been exported for each controller. Controllers work fine on Steam (using SteamVR directly), but not on Viveport. For some reason, the SteamVR used by Viveport does not see the default bindings.

Bindings were generated automatically by Unity: Windows / SteamVR Input / Save and Generate. The binding files are located in: \ StreamingAssets \ SteamVR

Unity 2020.1.2f1

SteamVR beta 1.15.2

How to make bindings work on Viveport SteamVR?

How should the default bindings be properly exported and saved?

Actions file: actions.json

{
  "actions": [
    {
      "name": "/actions/default/in/InteractUI",
      "type": "boolean",
      "requirement": "suggested"
    },
    {
      "name": "/actions/default/in/Teleport",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/GrabPinch",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/GrabGrip",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/Pose",
      "type": "pose"
    },
    {
      "name": "/actions/default/in/SkeletonLeftHand",
      "type": "skeleton",
      "skeleton": "/skeleton/hand/left"
    },
    {
      "name": "/actions/default/in/SkeletonRightHand",
      "type": "skeleton",
      "skeleton": "/skeleton/hand/right"
    },
    {
      "name": "/actions/default/in/Squeeze",
      "type": "vector1",
      "requirement": "optional"
    },
    {
      "name": "/actions/default/in/HeadsetOnHead",
      "type": "boolean",
      "requirement": "optional"
    },
    {
      "name": "/actions/default/in/SnapTurnLeft",
      "type": "boolean",
      "requirement": "suggested"
    },
    {
      "name": "/actions/default/in/SnapTurnRight",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/SaberOnOff",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/ForceUse",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/Movement",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/VIVE Tutorial",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/Index Tutorial",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/Oculus_Tutorial",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/DirectionalMovement",
      "type": "vector2"
    },
    {
      "name": "/actions/default/in/MENU",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/WMR_Tutorial",
      "type": "boolean"
    },
    {
      "name": "/actions/default/in/VIVE_Cosmos",
      "type": "boolean"
    },
    {
      "name": "/actions/default/out/Haptic",
      "type": "vibration"
    },
    {
      "name": "/actions/platformer/in/Move",
      "type": "vector2"
    },
    {
      "name": "/actions/platformer/in/Jump",
      "type": "boolean"
    },
    {
      "name": "/actions/buggy/in/Steering",
      "type": "vector2"
    },
    {
      "name": "/actions/buggy/in/Throttle",
      "type": "vector1"
    },
    {
      "name": "/actions/buggy/in/Brake",
      "type": "boolean"
    },
    {
      "name": "/actions/buggy/in/Reset",
      "type": "boolean"
    },
    {
      "name": "/actions/mixedreality/in/ExternalCamera",
      "type": "pose",
      "requirement": "optional"
    }
  ],
  "action_sets": [
    {
      "name": "/actions/default",
      "usage": "single"
    },
    {
      "name": "/actions/platformer",
      "usage": "single"
    },
    {
      "name": "/actions/buggy",
      "usage": "single"
    },
    {
      "name": "/actions/mixedreality",
      "usage": "single"
    }
  ],
  "default_bindings": [
    {
      "controller_type": "vive_controller",
      "binding_url": "bindings_vive_controller.json"
    },
    {
      "controller_type": "oculus_touch",
      "binding_url": "bindings_oculus_touch.json"
    },
    {
      "controller_type": "knuckles",
      "binding_url": "bindings_knuckles.json"
    },
    {
      "controller_type": "holographic_controller",
      "binding_url": "bindings_holographic_controller.json"
    },
    {
      "controller_type": "vive_cosmos_controller",
      "binding_url": "bindings_vive_cosmos_controller.json"
    },
    {
      "controller_type": "vive_cosmos",
      "binding_url": "binding_vive_cosmos.json"
    },
    {
      "controller_type": "vive",
      "binding_url": "binding_vive.json"
    },
    {
      "controller_type": "indexhmd",
      "binding_url": "binding_index_hmd.json"
    },
    {
      "controller_type": "vive_pro",
      "binding_url": "binding_vive_pro.json"
    },
    {
      "controller_type": "rift",
      "binding_url": "binding_rift.json"
    },
    {
      "controller_type": "holographic_hmd",
      "binding_url": "binding_holographic_hmd.json"
    },
    {
      "controller_type": "vive_tracker_camera",
      "binding_url": "binding_vive_tracker_camera.json"
    }
  ],
  "localization": [
    {
      "language_tag": "en_US",
      "/actions/default/in/GrabGrip": "Grab Grip",
      "/actions/default/in/GrabPinch": "Grab Pinch",
      "/actions/default/in/HeadsetOnHead": "Headset on head (proximity sensor)",
      "/actions/default/in/InteractUI": "Interact With UI",
      "/actions/default/in/Pose": "Pose",
      "/actions/default/in/SkeletonLeftHand": "Skeleton (Left)",
      "/actions/default/in/SkeletonRightHand": "Skeleton (Right)",
      "/actions/default/in/Teleport": "Teleport",
      "/actions/default/out/Haptic": "Haptic",
      "/actions/platformer/in/Jump": "Jump",
      "/actions/default/in/SnapTurnLeft": "Snap Turn (Left)",
      "/actions/default/in/SnapTurnRight": "Snap Turn (Right)",
      "/actions/default/in/SaberOnOff": "Saber On/Off",
      "/actions/default/in/ForceUse": "Force Use",
      "/actions/default/in/Movement": "Movement (Grab)",
      "/actions/default/in/VIVE Tutorial": "VIVE Tutorial",
      "/actions/default/in/Index Tutorial": "Index Tutorial",
      "/actions/default/in/Oculus_Tutorial": "Oculus Tutorial",
      "/actions/default/in/DirectionalMovement": "Movement (Directional)",
      "/actions/default/in/MENU": "MENU",
      "/actions/default/in/WMR_Tutorial": "Windows Mixed Reality Tutorial",
      "/actions/default/in/VIVE_Cosmos": "Vive Cosmos Identification"
    }
  ]
}

Example binding file: bindings_knuckles.json

{
   "action_manifest_version" : 0,
   "alias_info" : {},
   "app_key" : "application.generated.unity.saberfightvr.exe",
   "bindings" : {
      "/actions/buggy" : {
         "sources" : [
            {
               "inputs" : {
                  "position" : {
                     "output" : "/actions/buggy/in/steering"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "position" : {
                     "output" : "/actions/buggy/in/steering"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/right/input/thumbstick"
            },
            {
               "inputs" : {
                  "pull" : {
                     "output" : "/actions/buggy/in/throttle"
                  }
               },
               "mode" : "trigger",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "pull" : {
                     "output" : "/actions/buggy/in/throttle"
                  }
               },
               "mode" : "trigger",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/buggy/in/brake"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/buggy/in/brake"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/buggy/in/reset"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/buggy/in/reset"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
      "/actions/default" : {
         "chords" : [],
         "haptics" : [
            {
               "output" : "/actions/default/out/haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/default/out/haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "poses" : [
            {
               "output" : "/actions/default/in/pose",
               "path" : "/user/hand/left/pose/raw"
            },
            {
               "output" : "/actions/default/in/pose",
               "path" : "/user/hand/right/pose/raw"
            }
         ],
         "skeleton" : [
            {
               "output" : "/actions/default/in/skeletonlefthand",
               "path" : "/user/hand/left/input/skeleton/left"
            },
            {
               "output" : "/actions/default/in/skeletonrighthand",
               "path" : "/user/hand/right/input/skeleton/right"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/interactui"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/movement"
                  },
                  "position" : {
                     "output" : "/actions/default/in/directionalmovement"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/grabpinch"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/saberonoff"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/index tutorial"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/menu"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/forceuse"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/saberonoff"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/menu"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/grabpinch"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/movement"
                  },
                  "position" : {
                     "output" : "/actions/default/in/directionalmovement"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/right/input/thumbstick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/forceuse"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trackpad"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/interactui"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/default/in/index tutorial"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/default/in/snapturnright"
                  },
                  "west" : {
                     "output" : "/actions/default/in/snapturnleft"
                  }
               },
               "mode" : "dpad",
               "parameters" : {
                  "sub_mode" : "touch"
               },
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/default/in/snapturnright"
                  },
                  "west" : {
                     "output" : "/actions/default/in/snapturnleft"
                  }
               },
               "mode" : "dpad",
               "parameters" : {
                  "sub_mode" : "touch"
               },
               "path" : "/user/hand/right/input/thumbstick"
            }
         ]
      },
      "/actions/platformer" : {
         "sources" : [
            {
               "inputs" : {
                  "position" : {
                     "output" : "/actions/platformer/in/move"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "position" : {
                     "output" : "/actions/platformer/in/move"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/right/input/thumbstick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/platformer/in/jump"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/platformer/in/jump"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "knuckles",
   "description" : "",
   "name" : "Saber Fight VR for Index Controller",
   "options" : {},
   "simulated_actions" : []
}

0

There are 0 answers