DebugDistance.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Globalization;
  2. using UnityEngine;
  3. using UnityEngine.Rendering;
  4. namespace ARLocation.UI
  5. {
  6. public class DebugDistance : MonoBehaviour
  7. {
  8. private LineRenderer lineRenderer;
  9. private Camera mainCamera;
  10. private TextMesh textMesh;
  11. private GameObject textMeshGo;
  12. private ARLocationManager arLocationManager;
  13. private bool hasArLocationManager;
  14. // Start is called before the first frame update
  15. void Start()
  16. {
  17. mainCamera = ARLocationManager.Instance.MainCamera;
  18. lineRenderer = GetComponent<LineRenderer>();
  19. arLocationManager = ARLocationManager.Instance;
  20. hasArLocationManager = arLocationManager != null;
  21. if (!lineRenderer)
  22. {
  23. lineRenderer = gameObject.AddComponent<LineRenderer>();
  24. var shader = Shader.Find("Unlit/Color");
  25. if (shader)
  26. {
  27. lineRenderer.material = new Material(shader)
  28. {
  29. color = new Color(0.3960f, 0.6901f, 0.9725f)
  30. };
  31. }
  32. }
  33. lineRenderer.useWorldSpace = true;
  34. lineRenderer.alignment = LineAlignment.View;
  35. lineRenderer.receiveShadows = false;
  36. lineRenderer.shadowCastingMode = ShadowCastingMode.Off;
  37. lineRenderer.allowOcclusionWhenDynamic = false;
  38. lineRenderer.positionCount = 2;
  39. lineRenderer.startWidth = 0.1f;
  40. lineRenderer.endWidth = 0.1f;
  41. textMeshGo = new GameObject(gameObject.name + "_text");
  42. textMeshGo.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
  43. textMesh = textMeshGo.AddComponent<TextMesh>();
  44. textMesh.fontSize = 100;
  45. }
  46. void Update()
  47. {
  48. var floorLevel = hasArLocationManager ? arLocationManager.CurrentGroundY : -ARLocation.Config.InitialGroundHeightGuess;
  49. var startPos = MathUtils.SetY(mainCamera.transform.position, floorLevel);
  50. var endPos = MathUtils.SetY(transform.position, floorLevel);
  51. var lineDir = (endPos - startPos).normalized;
  52. lineRenderer.SetPosition(0, startPos);
  53. lineRenderer.SetPosition(1, endPos);
  54. var textPos = startPos + lineDir * 6.0f;
  55. textMeshGo.transform.position = textPos;
  56. textMeshGo.transform.LookAt(endPos, new Vector3(0, 1, 0));
  57. textMeshGo.transform.Rotate(90, 90, 0);
  58. textMesh.text = Vector3.Distance(startPos, endPos).ToString("0.00", CultureInfo.InvariantCulture) + "m";
  59. }
  60. }
  61. }