Hệ thống La bàn (Compass)
C# Code
using UnityEngine;
using UnityEngine.UI;
public class Compass : MonoBehaviour
{
public Transform playerTransform;
public RectTransform compassBar;
public GameObject markerPrefab;
public Transform target;
private Image markerImage;
void Start()
{
GameObject newMarker = Instantiate(markerPrefab, compassBar);
markerImage = newMarker.GetComponent<Image>();
}
void Update()
{
if (playerTransform == null || target == null || markerImage == null) return;
// Tính toán hướng tới mục tiêu
Vector3 directionToTarget = (target.position - playerTransform.position).normalized;
// Chuyển hướng 3D thành góc 2D trên mặt phẳng XZ
float angle = Vector2.SignedAngle(new Vector2(playerTransform.forward.x, playerTransform.forward.z),
new Vector2(directionToTarget.x, directionToTarget.z));
// Chuyển góc thành vị trí trên thanh la bàn
float compassWidth = compassBar.rect.width;
float markerPositionX = Mathf.Clamp(angle / 180f * compassWidth, -compassWidth / 2f, compassWidth / 2f);
markerImage.rectTransform.anchoredPosition = new Vector2(markerPositionX, 0);
}
}Hiển thị các điểm đánh dấu (marker) cho các mục tiêu trên một thanh la bàn UI, giúp người chơi định hướng.