using UnityEngine; using System.Collections.Generic; public class StatueDetection : MonoBehaviour { public List statues; // Λίστα με όλα τα αγάλματα [SerializeField] private float viewRadius = 10f; // Πόσο μακριά μπορεί να δει ο παίκτης [SerializeField] private float viewAngle = 90f; // Γωνία οπτικού πεδίου του παίκτη private void Update() { CheckStatuesInView(); } // Έλεγχος αν κάποιο άγαλμα είναι εντός οπτικού πεδίου public bool CheckStatuesInView() { foreach (Transform statue in statues) { if (IsLookingAtStatue(statue)) { Debug.Log($"Looking at statue: {statue.name}"); return true; } } return false; } // Μέθοδος για να ελέγξουμε αν ο παίκτης κοιτάζει συγκεκριμένο άγαλμα private bool IsLookingAtStatue(Transform statue) { // Υπολογισμός κατεύθυνσης από τον παίκτη προς το άγαλμα Vector3 dirToStatue = (statue.position - transform.position).normalized; // Υπολογισμός απόστασης προς το άγαλμα float distToStatue = Vector3.Distance(transform.position, statue.position); // Έλεγχος αν το άγαλμα είναι εντός του radius και της γωνίας θέασης if (distToStatue <= viewRadius && Vector3.Angle(transform.forward, dirToStatue) < viewAngle / 2) { return true; } return false; } // Για debugging - σχεδιάζουμε το οπτικό πεδίο private void OnDrawGizmos() { Gizmos.color = Color.blue; // Σχεδίαση σφαίρας που αντιπροσωπεύει το radius Gizmos.DrawWireSphere(transform.position, viewRadius); // Σχεδίαση γραμμών που αντιπροσωπεύουν τη γωνία θέασης Vector3 viewAngleA = DirFromAngle(-viewAngle / 2); Vector3 viewAngleB = DirFromAngle(viewAngle / 2); Gizmos.DrawLine(transform.position, transform.position + viewAngleA * viewRadius); Gizmos.DrawLine(transform.position, transform.position + viewAngleB * viewRadius); } // Βοηθητική συνάρτηση για υπολογισμό κατεύθυνσης public Vector3 DirFromAngle(float angleInDegrees) { angleInDegrees += transform.eulerAngles.y; return new Vector3(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), 0, Mathf.Cos(angleInDegrees * Mathf.Deg2Rad)); } }