SCKeyboardFollower.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using DG.Tweening;
  2. using LitJson;
  3. using System.Collections;
  4. using UnityEngine;
  5. namespace SC.XR.Unity {
  6. [RequireComponent(typeof(SCKeyboardMono))]
  7. public class SCKeyboardFollower : FollowerBase {
  8. Vector3 viewPoint = Vector3.zero;
  9. bool isFollowing = false;
  10. Vector2 initViewPoint;
  11. Vector3 startScale;
  12. float z = 0;
  13. float y = 0;
  14. private void Start()
  15. {
  16. startScale = transform.localScale;
  17. HttpTool.Instance.Get("https://fat1.qulivr.com/mr-navigator/v1/", "", (string getInterval) => {
  18. Debug.Log(getInterval);
  19. if (getInterval == null)
  20. Debug.LogError(" HttpTool Get Interval Error!!! ");
  21. JsonData data = JsonMapper.ToObject(getInterval);
  22. Debug.Log(data["code"]);
  23. if ((int)data["code"] == 200)
  24. {
  25. z = float.Parse(data["defaultKeyboardZaxis"].ToString());
  26. y = float.Parse(data["defaultKeyboardHeight"].ToString());
  27. }
  28. else
  29. Debug.LogError(" HttpTool Get Interval Error!!! ");
  30. });
  31. }
  32. protected override void OnEnable() {
  33. base.OnEnable();
  34. initViewPoint = Camera.main.WorldToViewportPoint(CalculateWindowPosition(Camera.main.transform));
  35. isFollowing = true;
  36. StopFollower = false;
  37. }
  38. private void Update()
  39. {
  40. if(transform.eulerAngles.y!=0)
  41. {
  42. transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0);
  43. }
  44. if(transform.eulerAngles.x>5)
  45. {
  46. transform.eulerAngles = new Vector3(5, 0, 0);
  47. }
  48. else if(transform.eulerAngles.x<-5)
  49. {
  50. transform.eulerAngles = new Vector3(-5, 0, 0);
  51. }
  52. transform.localScale = startScale * 1.5f;
  53. }
  54. protected override void Follow() {
  55. if (Camera.main == null || Camera.main.transform == null)
  56. return;
  57. viewPoint = Camera.main.WorldToViewportPoint(transform.position);
  58. if (viewPoint.x < (initViewPoint.x - 1f) || viewPoint.y < (initViewPoint.y - 0.5f) || viewPoint.x > (initViewPoint.x + 1f) || viewPoint.y > (initViewPoint.y + 1f) || Vector3.Magnitude(Camera.main.transform.position - transform.position) > (WindowDistance+0.1f)) {
  59. isFollowing = true;
  60. } else if (Mathf.Abs(viewPoint.x - initViewPoint.x) < 0.03f && Mathf.Abs(viewPoint.y - initViewPoint.y) < 0.03f) {
  61. isFollowing = false;
  62. StopFollower = true;
  63. }
  64. if (Mathf.Abs(Vector3.Distance(transform.position, CalculateWindowPosition(Camera.main.transform) + new Vector3(0, y, z))) < 0.1f)
  65. isFollowing = false;
  66. if (isFollowing) {
  67. transform.position = Vector3.Lerp(transform.position, CalculateWindowPosition(Camera.main.transform)+new Vector3(0,y,z), WindowFollowSpeed * Time.deltaTime);
  68. transform.rotation = Quaternion.Slerp(transform.rotation, CalculateWindowRotation(Camera.main.transform), WindowFollowSpeed * Time.deltaTime);
  69. }
  70. }
  71. }
  72. }