using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; 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 void Start() { offset = distanceMarker.transform.position - pointer.transform.position; } // Update is called once per frame void Update() { float minX = pointer.GetPixelAdjustedRect().width / 2; float maxX = Screen.width - minX; float minY = pointer.GetPixelAdjustedRect().height / 2; float 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)).ToString() + " meters"; if (pos.x < Screen.width / 2) { distanceMarker.transform.position = pos + offset; } else { distanceMarker.transform.position = pos - offset; } } }