3using UnityEngine.Events;
15 [InspectorName(
"Disabled")]
17 [InspectorName(
"Any Hand")]
19 [InspectorName(
"Left Hand")]
21 [InspectorName(
"Right Hand")]
23 [InspectorName(
"Left Foot")]
25 [InspectorName(
"Right Foot")]
27 [InspectorName(
"Left Shoulder")]
29 [InspectorName(
"Right Shoulder")]
31 [InspectorName(
"Left Elbow")]
33 [InspectorName(
"Right Elbow")]
35 [InspectorName(
"Left Knee")]
37 [InspectorName(
"Right Knee")]
39 [InspectorName(
"Left Wrist")]
41 [InspectorName(
"Right Wrist")]
43 [InspectorName(
"Left Ankle")]
45 [InspectorName(
"Right Ankle")]
47 [InspectorName(
"Waist")]
49 [InspectorName(
"Chest")]
51 [InspectorName(
"Camera")]
53 [InspectorName(
"Keyboard")]
57 [Tooltip(
"Specify a binding from SteamVR for this tracker. Assign a tracker to this same binding in SteamVR.")]
60 [Tooltip(
"If not set, relative to parent")]
62 private UnityAction<string, TrackedDevicePose_t, int> _onNewBoundPoseAction;
63 private UnityAction _onTrackerRolesChanged;
65 private Quaternion rotationAlignment = Quaternion.identity;
75 return "TrackerRole_Handed,TrackedControllerRole_Invalid";
77 return "TrackerRole_Handed,TrackedControllerRole_LeftHand";
79 return "TrackerRole_Handed,TrackedControllerRole_RightHand";
93 var memberInfos = enumType
96 var enumValueMemberInfo = memberInfos
97 .FirstOrDefault(m => m.DeclaringType == enumType);
99 var valueAttributes = enumValueMemberInfo
100 .GetCustomAttributes(typeof(InspectorNameAttribute),
false);
102 var description = ((InspectorNameAttribute)valueAttributes[0])
112 private void OnDeviceConnected(
int index,
bool connected)
120 private bool doCalibration =
false;
122 private void OnNewBoundPose(
string binding, TrackedDevicePose_t pose,
int deviceIndex)
136 if (!pose.bDeviceIsConnected)
139 if (!pose.bPoseIsValid)
144 var rigidTransform =
new OVRT_Utils.RigidTransform(pose.mDeviceToAbsoluteTracking);
148 transform.position =
origin.transform.TransformPoint(rigidTransform.pos);
154 rotationAlignment = Quaternion.Inverse(
origin.rotation * rigidTransform.rot);
155 doCalibration =
false;
157 transform.rotation = origin.rotation * rigidTransform.rot * rotationAlignment;
161 transform.localPosition = rigidTransform.pos;
162 transform.localRotation = rigidTransform.rot;
169 doCalibration =
true;
172 private void OnTrackerRolesChanged()
180 _onNewBoundPoseAction += OnNewBoundPose;
182 _onTrackerRolesChanged += OnTrackerRolesChanged;
185 private void OnEnable()
187 OVRT_Events.NewBoundPose.AddListener(_onNewBoundPoseAction);
189 OVRT_Events.TrackerRolesChanged.AddListener(_onTrackerRolesChanged);
192 private void OnDisable()
194 OVRT_Events.NewBoundPose.RemoveListener(_onNewBoundPoseAction);
196 OVRT_Events.TrackerRolesChanged.RemoveListener(_onTrackerRolesChanged);
203 SetOrigin(FindFirstObjectByType<Vive_Manager>().transform);
215 private void OnDrawGizmos()
217 Gizmos.DrawMesh(
ViveDebugRenderer.trackerMesh, transform.position, transform.rotation);
UnityAction< int, bool > _onDeviceConnectedAction
UnityEvent< int > onDeviceIndexChanged
This class loads the vive tracker mesh, to be used by ViveTracker when rendering a gizmo.
void SetOrigin(Transform t)
SteamVRPoseBindings binding
static string GetReadableName(SteamVRPoseBindings binding)
@ TrackerRole_LeftShoulder
@ TrackerRole_RightShoulder
static string TrackerRoleToBindingName(SteamVRPoseBindings binding)