|
|
- //======= Copyright (c) Valve Corporation, All rights reserved. ===============
- //
- // Purpose: Test SteamVR_Controller support.
- //
- //=============================================================================
-
- using UnityEngine;
- using System.Collections.Generic;
- using Valve.VR;
-
- public class SteamVR_TestController : MonoBehaviour
- {
- List<int> controllerIndices = new List<int>();
-
- private void OnDeviceConnected(int index, bool connected)
- {
- var system = OpenVR.System;
- if (system == null || system.GetTrackedDeviceClass((uint)index) != ETrackedDeviceClass.Controller)
- return;
-
- if (connected)
- {
- Debug.Log(string.Format("Controller {0} connected.", index));
- PrintControllerStatus(index);
- controllerIndices.Add(index);
- }
- else
- {
- Debug.Log(string.Format("Controller {0} disconnected.", index));
- PrintControllerStatus(index);
- controllerIndices.Remove(index);
- }
- }
-
- void OnEnable()
- {
- SteamVR_Events.DeviceConnected.Listen(OnDeviceConnected);
- }
-
- void OnDisable()
- {
- SteamVR_Events.DeviceConnected.Remove(OnDeviceConnected);
- }
-
- void PrintControllerStatus(int index)
- {
- var device = SteamVR_Controller.Input(index);
- Debug.Log("index: " + device.index);
- Debug.Log("connected: " + device.connected);
- Debug.Log("hasTracking: " + device.hasTracking);
- Debug.Log("outOfRange: " + device.outOfRange);
- Debug.Log("calibrating: " + device.calibrating);
- Debug.Log("uninitialized: " + device.uninitialized);
- Debug.Log("pos: " + device.transform.pos);
- Debug.Log("rot: " + device.transform.rot.eulerAngles);
- Debug.Log("velocity: " + device.velocity);
- Debug.Log("angularVelocity: " + device.angularVelocity);
-
- var l = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);
- var r = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);
- Debug.Log((l == r) ? "first" : (l == index) ? "left" : "right");
- }
-
- EVRButtonId[] buttonIds = new EVRButtonId[] {
- EVRButtonId.k_EButton_ApplicationMenu,
- EVRButtonId.k_EButton_Grip,
- EVRButtonId.k_EButton_SteamVR_Touchpad,
- EVRButtonId.k_EButton_SteamVR_Trigger
- };
-
- EVRButtonId[] axisIds = new EVRButtonId[] {
- EVRButtonId.k_EButton_SteamVR_Touchpad,
- EVRButtonId.k_EButton_SteamVR_Trigger
- };
-
- public Transform point, pointer;
-
- void Update()
- {
- foreach (var index in controllerIndices)
- {
- var overlay = SteamVR_Overlay.instance;
- if (overlay && point && pointer)
- {
- var t = SteamVR_Controller.Input(index).transform;
- pointer.transform.localPosition = t.pos;
- pointer.transform.localRotation = t.rot;
-
- var results = new SteamVR_Overlay.IntersectionResults();
- var hit = overlay.ComputeIntersection(t.pos, t.rot * Vector3.forward, ref results);
- if (hit)
- {
- point.transform.localPosition = results.point;
- point.transform.localRotation = Quaternion.LookRotation(results.normal);
- }
-
- continue;
- }
-
- foreach (var buttonId in buttonIds)
- {
- if (SteamVR_Controller.Input(index).GetPressDown(buttonId))
- Debug.Log(buttonId + " press down");
- if (SteamVR_Controller.Input(index).GetPressUp(buttonId))
- {
- Debug.Log(buttonId + " press up");
- if (buttonId == EVRButtonId.k_EButton_SteamVR_Trigger)
- {
- SteamVR_Controller.Input(index).TriggerHapticPulse();
- PrintControllerStatus(index);
- }
- }
- if (SteamVR_Controller.Input(index).GetPress(buttonId))
- Debug.Log(buttonId);
- }
-
- foreach (var buttonId in axisIds)
- {
- if (SteamVR_Controller.Input(index).GetTouchDown(buttonId))
- Debug.Log(buttonId + " touch down");
- if (SteamVR_Controller.Input(index).GetTouchUp(buttonId))
- Debug.Log(buttonId + " touch up");
- if (SteamVR_Controller.Input(index).GetTouch(buttonId))
- {
- var axis = SteamVR_Controller.Input(index).GetAxis(buttonId);
- Debug.Log("axis: " + axis);
- }
- }
- }
- }
- }
-
|