using TMPro; using UnityEngine; using UnityEngine.UI; public class WaypointMarker : MonoBehaviour { public Image pointer; public Transform target; public TMP_Text distanceMarker; private Vector2 offset; // Start is called before the first frame update private void Start() { offset = distanceMarker.transform.position - pointer.transform.position; } // Update is called once per frame private void Update() { var minX = pointer.GetPixelAdjustedRect().width / 2; var maxX = Screen.width - minX; var minY = pointer.GetPixelAdjustedRect().height / 2; var maxY = Screen.height - minY; Vector2 pos = Camera.main.WorldToScreenPoint(target.position); if (Vector3.Dot(target.position - Camera.main.transform.position, Camera.main.transform.forward) < 0) { //target is behind player if (pos.x < Screen.width / 2) pos.x = maxX; else pos.x = minX; } pos.x = Mathf.Clamp(pos.x, minX, maxX); pos.y = Mathf.Clamp(pos.y, minY, maxY); pointer.transform.position = pos; distanceMarker.text = Mathf.RoundToInt(Vector3.Distance(Camera.main.transform.position, target.transform.position)) + " meters"; if (pos.x < Screen.width / 2) distanceMarker.transform.position = pos + offset; else distanceMarker.transform.position = pos - offset; } }