FrontWheelTracker.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class FrontWheelTracker : MonoBehaviour
  6. {
  7. private const String KEY_POS_X = "vive_tracker_pos_x";
  8. private const String KEY_POS_Y = "vive_tracker_pos_y";
  9. private const String KEY_POS_Z = "vive_tracker_pos_z";
  10. private const String KEY_ROT_X = "vive_tracker_rot_x";
  11. private const String KEY_ROT_Y = "vive_tracker_rot_y";
  12. private const String KEY_ROT_Z = "vive_tracker_rot_z";
  13. private Transform trackerTransform;
  14. private Vector3 zeroRot;
  15. private Vector3 zeroPos;
  16. public Vector3 Rotation
  17. {
  18. get
  19. {
  20. var newVal = trackerTransform.localRotation.eulerAngles - zeroRot;
  21. var x = newVal.x;
  22. var y = newVal.y;
  23. var z = newVal.z;
  24. if (x > 180) x = -(360 - x);
  25. if (y > 180) y = -(360 - y);
  26. if (z > 180) z = -(360 - z);
  27. return new Vector3(x,y,z);
  28. }
  29. }
  30. public Vector3 Position => trackerTransform.localPosition - zeroPos;
  31. public Vector3 ZeroRot => zeroRot;
  32. public Vector3 ZeroPos => zeroPos;
  33. // Start is called before the first frame update
  34. void Start()
  35. {
  36. trackerTransform = transform;
  37. if (PlayerPrefs.HasKey(KEY_POS_X) && PlayerPrefs.HasKey(KEY_POS_Y) && PlayerPrefs.HasKey(KEY_POS_Z))
  38. {
  39. var x = PlayerPrefs.GetFloat(KEY_POS_X);
  40. var y = PlayerPrefs.GetFloat(KEY_POS_Y);
  41. var z = PlayerPrefs.GetFloat(KEY_POS_Z);
  42. zeroPos = new Vector3(x, y, z);
  43. }
  44. if (PlayerPrefs.HasKey(KEY_ROT_X) && PlayerPrefs.HasKey(KEY_ROT_Y) && PlayerPrefs.HasKey(KEY_ROT_Z))
  45. {
  46. var x = PlayerPrefs.GetFloat(KEY_ROT_X);
  47. var y = PlayerPrefs.GetFloat(KEY_ROT_Y);
  48. var z = PlayerPrefs.GetFloat(KEY_ROT_Z);
  49. zeroRot = new Vector3(x, y, z);
  50. }
  51. }
  52. // Update is called once per frame
  53. void Update()
  54. {
  55. }
  56. //sets current position as zero -> straighten handlebar and call this function
  57. public void Calibrate()
  58. {
  59. zeroRot = trackerTransform.localRotation.eulerAngles;
  60. zeroPos = trackerTransform.localPosition;
  61. PlayerPrefs.SetFloat(KEY_ROT_X, zeroRot.x);
  62. PlayerPrefs.SetFloat(KEY_ROT_Y, zeroRot.y);
  63. PlayerPrefs.SetFloat(KEY_ROT_Z, zeroRot.z);
  64. PlayerPrefs.SetFloat(KEY_POS_X, zeroPos.x);
  65. PlayerPrefs.SetFloat(KEY_POS_Y, zeroPos.y);
  66. PlayerPrefs.SetFloat(KEY_POS_Z, zeroPos.z);
  67. PlayerPrefs.Save();
  68. }
  69. }