2 using UnityEngine.EventSystems;
3 using System.Collections;
10 if( trackedObj == null )
12 if (trackedObj == null)
14 return SteamVR_Controller.Input ((int)trackedObj.index);
19 private Valve.VR.EVRButtonId triggerButton = Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger;
21 public SteamVR_TrackedObject.EIndex controllerIndex {
23 if (trackedObj != null) {
24 return trackedObj.index;
32 protected bool triggerPressedDown =
false;
33 protected bool helpState =
false;
35 protected Vector2 previousTouchpad = Vector2.zero;
36 public Vector2 touchpadValue {
protected set;
get; }
37 public Vector2 touchpadDelta {
protected set;
get; }
40 protected PointerEventData.FramePressState
m_triggerButtonState = PointerEventData.FramePressState.NotChanged;
41 public PointerEventData.FramePressState triggerButtonState {
48 public PointerEventData.FramePressState touchpadButtonState {
58 private Vector3 previousPosition;
61 private GameObject spriteTouchpadCenter;
62 private GameObject spriteTouchpadLeft;
63 private GameObject spriteTouchpadRight;
64 private GameObject spriteTouchpadUp;
65 private GameObject spriteTouchpadDown;
67 public Color iconColor =
new Color( 0.7f, 0.85f, 1.0f );
68 public Color iconColorHighlight =
new Color( 0.85f, 1.0f, 0.85f );
71 public void Start () {
74 previousPosition = Vector3.zero;
77 spriteTouchpadCenter =
new GameObject(
"SpriteTouchpadCenter");
78 spriteTouchpadCenter.transform.SetParent( transform );
79 spriteTouchpadCenter.AddComponent<SpriteRenderer> ();
80 spriteTouchpadCenter.transform.localPosition =
new Vector3 (0f, 0.0068f, -0.0488f);
81 spriteTouchpadCenter.transform.localEulerAngles =
new Vector3 (85f, 0f, 0f);
82 spriteTouchpadCenter.transform.localScale =
new Vector3 (0.015f, 0.015f, 0.015f);
83 spriteTouchpadCenter.GetComponent<SpriteRenderer> ().color = iconColor;
85 spriteTouchpadLeft =
new GameObject(
"SpriteTouchpadLeft");
86 spriteTouchpadLeft.transform.SetParent( transform );
87 spriteTouchpadLeft.AddComponent<SpriteRenderer> ();
88 spriteTouchpadLeft.transform.localPosition =
new Vector3 (-0.015f, 0.0068f, -0.049f);
89 spriteTouchpadLeft.transform.localEulerAngles =
new Vector3 (85f, 0f, 0f);
90 spriteTouchpadLeft.transform.localScale =
new Vector3 (0.015f, 0.015f, 0.015f);
91 spriteTouchpadLeft.GetComponent<SpriteRenderer> ().color = iconColor;
93 spriteTouchpadRight =
new GameObject(
"SpriteTouchpadRight");
94 spriteTouchpadRight.transform.SetParent( transform );
95 spriteTouchpadRight.AddComponent<SpriteRenderer> ();
96 spriteTouchpadRight.transform.localPosition =
new Vector3 (0.015f, 0.0068f, -0.049f);
97 spriteTouchpadRight.transform.localEulerAngles =
new Vector3 (85f, 0f, 0f);
98 spriteTouchpadRight.transform.localScale =
new Vector3 (0.015f, 0.015f, 0.015f);
99 spriteTouchpadRight.GetComponent<SpriteRenderer> ().color = iconColor;
101 spriteTouchpadUp =
new GameObject(
"SpriteTouchpadUp");
102 spriteTouchpadUp.transform.SetParent( transform );
103 spriteTouchpadUp.AddComponent<SpriteRenderer> ();
104 spriteTouchpadUp.transform.localPosition =
new Vector3 (0f, 0.0068f, -0.035f);
105 spriteTouchpadUp.transform.localEulerAngles =
new Vector3 (85f, 0f, 0f);
106 spriteTouchpadUp.transform.localScale =
new Vector3 (0.015f, 0.015f, 0.015f);
107 spriteTouchpadUp.GetComponent<SpriteRenderer> ().color = iconColor;
109 spriteTouchpadDown =
new GameObject(
"SpriteTouchpadDown");
110 spriteTouchpadDown.transform.SetParent( transform );
111 spriteTouchpadDown.AddComponent<SpriteRenderer> ();
112 spriteTouchpadDown.transform.localPosition =
new Vector3 (0f, 0.0068f, -0.064f);
113 spriteTouchpadDown.transform.localEulerAngles =
new Vector3 (85f, 0f, 0f);
114 spriteTouchpadDown.transform.localScale =
new Vector3 (0.015f, 0.015f, 0.015f);
115 spriteTouchpadDown.GetComponent<SpriteRenderer> ().color = iconColor;
118 public void Update() {
120 previousPosition = transform.position;
122 UpdateTriggerState ();
123 UpdateTouchpadButton ();
126 spriteTouchpadCenter.GetComponent<SpriteRenderer> ().color = iconColor;
127 spriteTouchpadLeft.GetComponent<SpriteRenderer> ().color = iconColor;
128 spriteTouchpadRight.GetComponent<SpriteRenderer> ().color = iconColor;
129 spriteTouchpadUp.GetComponent<SpriteRenderer> ().color = iconColor;
130 spriteTouchpadDown.GetComponent<SpriteRenderer> ().color = iconColor;
132 if( controller.GetTouch(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad) )
134 if (hoverTouchpadCenter ()) {
135 spriteTouchpadCenter.GetComponent<SpriteRenderer> ().color = iconColorHighlight;
136 }
else if (hoverTouchpadLeft()) {
137 spriteTouchpadLeft.GetComponent<SpriteRenderer> ().color = iconColorHighlight;
138 }
else if (hoverTouchpadRight()) {
139 spriteTouchpadRight.GetComponent<SpriteRenderer> ().color = iconColorHighlight;
140 }
else if (hoverTouchpadUp()) {
141 spriteTouchpadUp.GetComponent<SpriteRenderer> ().color = iconColorHighlight;
142 }
else if (hoverTouchpadDown()) {
143 spriteTouchpadDown.GetComponent<SpriteRenderer> ().color = iconColorHighlight;
148 public bool hoverTouchpadCenter()
150 if (!controller.GetTouch (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
152 return touchpadValue.magnitude < 0.4;
154 public bool hoverTouchpadLeft()
156 if (!controller.GetTouch (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
158 return Mathf.Abs (touchpadValue.y) < 0.7 && touchpadValue.x < -0.55f;
160 public bool hoverTouchpadRight()
162 if (!controller.GetTouch (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
164 return Mathf.Abs (touchpadValue.y) < 0.7 && touchpadValue.x > 0.55f;
166 public bool hoverTouchpadUp()
168 if (!controller.GetTouch (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
170 return Mathf.Abs (touchpadValue.x) < 0.7 && touchpadValue.y > 0.55f;
172 public bool hoverTouchpadDown()
174 if (!controller.GetTouch (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
176 return Mathf.Abs (touchpadValue.x) < 0.7 && touchpadValue.y < -0.55f;
181 if( controller == null )
185 if (controller.GetAxis (triggerButton) ==
new Vector2 (1.0f, 0.0f)) {
194 if( controller == null )
197 return controller.GetAxis (triggerButton).x;
202 if( controller == null )
205 return controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad);
208 protected void UpdateTouchpad() {
209 touchpadValue = controller.GetAxis (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad);
210 if( touchpadValue.sqrMagnitude < 0.01f || previousTouchpad.sqrMagnitude < 0.01f )
212 touchpadDelta = Vector2.zero;
214 touchpadDelta = touchpadValue - previousTouchpad;
216 previousTouchpad = touchpadValue;
219 protected PointerEventData.FramePressState UpdateTriggerState() {
222 case PointerEventData.FramePressState.NotChanged:
227 if (helpState ==
false) {
236 case PointerEventData.FramePressState.Pressed:
241 triggerPressedDown =
true;
253 case PointerEventData.FramePressState.Released:
259 triggerPressedDown =
false;
266 protected PointerEventData.FramePressState UpdateTouchpadButton() {
268 if (controller == null)
271 if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad)) {
273 }
else if (controller.GetPressUp (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad)) {
282 public void shake(
float seconds,
float strength = 1f )
285 StartHapticVibration( seconds, strength );
288 public void set3DDelta( Vector2 delta ) {
292 public void setTouchpadCentralIcon( Sprite s )
294 spriteTouchpadCenter.GetComponent<SpriteRenderer> ().sprite = s;
297 public void setTouchpadDirectionIcons( Sprite l, Sprite r, Sprite u, Sprite d )
299 spriteTouchpadLeft.GetComponent<SpriteRenderer> ().sprite = l;
300 spriteTouchpadRight.GetComponent<SpriteRenderer> ().sprite = r;
301 spriteTouchpadUp.GetComponent<SpriteRenderer> ().sprite = u;
302 spriteTouchpadDown.GetComponent<SpriteRenderer> ().sprite = d;
308 protected Coroutine vibrationCoroutine;
310 public void StartHapticVibration(
float length,
float strength) {
311 if (vibrationCoroutine != null)
314 Coroutine coroutine = StartCoroutine(HapticVibrationCoroutine(length,strength));
315 vibrationCoroutine = coroutine;
318 public void StopHapticVibration() {
320 if( vibrationCoroutine == null ) {
323 StopCoroutine(vibrationCoroutine);
324 vibrationCoroutine = null;
327 protected IEnumerator HapticVibrationCoroutine(
float length,
float strength) {
329 for(
float i = 0; i < length; i += Time.deltaTime) {
330 controller.TriggerHapticPulse((ushort)Mathf.Lerp(0, 3999, strength));
333 vibrationCoroutine = null;
Vector3 positionDelta
The movement of the controller since the previous frame in world space:
PointerEventData.FramePressState m_triggerButtonState
PointerEventData.FramePressState m_touchpadButtonState