CalibrationMarkerBehavior.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.Net;
  5. using TMPro;
  6. using Unity.VisualScripting;
  7. using UnityEngine;
  8. using UnityEngine.Timeline;
  9. public class CalibrationMarkerBehavior : MonoBehaviour
  10. {
  11. Vector3[] frustumCorners;
  12. List<Vector3> targetPositions;
  13. // Start is called before the first frame update
  14. void Start()
  15. {
  16. var camera = Camera.main;
  17. frustumCorners = new Vector3[4];
  18. camera.CalculateFrustumCorners(camera.rect, camera.transform.position.y, camera.stereoActiveEye, frustumCorners);
  19. targetPositions = new List<Vector3>()
  20. {
  21. new Vector3(frustumCorners[0].x, 0, frustumCorners[0].y),
  22. new Vector3(frustumCorners[1].x, 0, frustumCorners[1].y),
  23. new Vector3(frustumCorners[2].x, 0, frustumCorners[2].y),
  24. new Vector3(frustumCorners[3].x, 0, frustumCorners[3].y),
  25. };
  26. currentTarget = GameObject.Find("CalibrationMarker").transform.position;
  27. }
  28. int targetIndex = -1;
  29. Vector3 currentTarget = Vector3.zero;
  30. Vector3 normalizedTranslationVector = Vector3.zero;
  31. // Update is called once per frame
  32. void Update()
  33. {
  34. var marker = GameObject.Find("CalibrationMarker");
  35. const float speed = 2.5f;
  36. if (Vector3.Distance(marker.transform.position, currentTarget) >= 0.05f)
  37. {
  38. marker.transform.position += Vector3.ClampMagnitude(speed * Time.deltaTime * normalizedTranslationVector, (currentTarget - marker.transform.position).magnitude);
  39. }
  40. else if (targetIndex < targetPositions.Count - 1)
  41. {
  42. targetIndex++;
  43. currentTarget = targetPositions[targetIndex];
  44. normalizedTranslationVector = (currentTarget - marker.transform.position).normalized;
  45. }
  46. }
  47. }