49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
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;
|
|
}
|
|
} |