8 using System.Collections.Generic;
13 List<int> controllerIndices =
new List<int>();
15 private void OnDeviceConnected(
int index,
bool connected)
17 var system = OpenVR.System;
18 if (system == null || system.GetTrackedDeviceClass((uint)index) != ETrackedDeviceClass.Controller)
23 Debug.Log(string.Format(
"Controller {0} connected.", index));
24 PrintControllerStatus(index);
25 controllerIndices.Add(index);
29 Debug.Log(string.Format(
"Controller {0} disconnected.", index));
30 PrintControllerStatus(index);
31 controllerIndices.Remove(index);
37 SteamVR_Events.DeviceConnected.Listen(OnDeviceConnected);
42 SteamVR_Events.DeviceConnected.Remove(OnDeviceConnected);
45 void PrintControllerStatus(
int index)
47 var device = SteamVR_Controller.Input(index);
48 Debug.Log(
"index: " + device.index);
49 Debug.Log(
"connected: " + device.connected);
50 Debug.Log(
"hasTracking: " + device.hasTracking);
51 Debug.Log(
"outOfRange: " + device.outOfRange);
52 Debug.Log(
"calibrating: " + device.calibrating);
53 Debug.Log(
"uninitialized: " + device.uninitialized);
54 Debug.Log(
"pos: " + device.transform.pos);
55 Debug.Log(
"rot: " + device.transform.rot.eulerAngles);
56 Debug.Log(
"velocity: " + device.velocity);
57 Debug.Log(
"angularVelocity: " + device.angularVelocity);
59 var l = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);
60 var r = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
61 Debug.Log((l == r) ?
"first" : (l == index) ?
"left" :
"right");
64 EVRButtonId[] buttonIds =
new EVRButtonId[] {
65 EVRButtonId.k_EButton_ApplicationMenu,
66 EVRButtonId.k_EButton_Grip,
67 EVRButtonId.k_EButton_SteamVR_Touchpad,
68 EVRButtonId.k_EButton_SteamVR_Trigger
71 EVRButtonId[] axisIds =
new EVRButtonId[] {
72 EVRButtonId.k_EButton_SteamVR_Touchpad,
73 EVRButtonId.k_EButton_SteamVR_Trigger
76 public Transform point, pointer;
80 foreach (var index
in controllerIndices)
82 var overlay = SteamVR_Overlay.instance;
83 if (overlay && point && pointer)
85 var t = SteamVR_Controller.Input(index).transform;
86 pointer.transform.localPosition = t.pos;
87 pointer.transform.localRotation = t.rot;
90 var hit = overlay.ComputeIntersection(t.pos, t.rot * Vector3.forward, ref results);
93 point.transform.localPosition = results.point;
94 point.transform.localRotation = Quaternion.LookRotation(results.normal);
100 foreach (var buttonId
in buttonIds)
103 Debug.Log(buttonId +
" press down");
106 Debug.Log(buttonId +
" press up");
107 if (buttonId == EVRButtonId.k_EButton_SteamVR_Trigger)
109 SteamVR_Controller.Input(index).TriggerHapticPulse();
110 PrintControllerStatus(index);
117 foreach (var buttonId
in axisIds)
120 Debug.Log(buttonId +
" touch down");
122 Debug.Log(buttonId +
" touch up");
125 var axis = SteamVR_Controller.Input(index).GetAxis(buttonId);
126 Debug.Log(
"axis: " + axis);