using UnityEngine; using System.Collections.Generic; public class SensorsScript : MonoBehaviour { // Layer à ignorer public int ObserverlayerToIgnore = 9; public int IteratorlayerToIgnore = 7; // Liste des angles et des offsets pour les raycasts public List raycastConfigurations = new List() { new Vector2(1.18f, 75f), new Vector2(1.18f, 55f), new Vector2(1.18f, 35f), new Vector2(1.18f, 15f), new Vector2(1.18f, 5f), new Vector2(0.59f, 4f), new Vector2(0.59f, 0), new Vector2(0.59f, -4f), new Vector2(0f, -5f), new Vector2(0f, -15f) , new Vector2(0f, -35f) , new Vector2(0f, -55f) , new Vector2(0f, -75f) }; // Longueur des raycasts public float raycastDistance = 20f; // Fonction pour obtenir les données de raycasts d'observation public List GetObserverRaycast() { List raycastsData = new List(); // Calculer le LayerMask pour ignorer le layer spécifié int layerMask = ~(1 << ObserverlayerToIgnore); // Pour chaque configuration de raycast foreach (var config in raycastConfigurations) { // Créer une variable pour stocker la position de départ du raycast Vector3 raycastStartPoint = transform.position; // Obtenir l'angle et l'offset à partir de la configuration float offset = config.x; float angle = config.y; // Calculer la direction du raycast en fonction de l'angle Vector2 raycastDirection = Quaternion.Euler(0, 0, angle) * transform.right; // Ajuster la position de départ du raycast en fonction de l'offset if (offset == 0.59f) { raycastStartPoint += new Vector3(0.5f, offset, 0f); } else { raycastStartPoint += new Vector3(0f, offset, 0f); } // Effectuer le raycast en ignorant le layer spécifié RaycastHit2D hit = Physics2D.Raycast(raycastStartPoint, raycastDirection, raycastDistance, layerMask); // Dessiner une ligne pour visualiser le raycast (pour le débogage) Debug.DrawRay(raycastStartPoint, raycastDirection * raycastDistance, Color.blue); // Créer un objet SensorData pour stocker les informations du raycast SensorData data = new SensorData(); // Enregistrer les informations du raycast if (hit.collider != null) { data.hitLayer = hit.collider.gameObject.layer; data.distance = hit.distance; // Dessiner une ligne rouge jusqu'au point de collision (pour le débogage) Debug.DrawLine(raycastStartPoint, hit.point, Color.red); } else { // Si aucun objet n'a été touché, utiliser des valeurs par défaut data.hitLayer = -1; data.distance = raycastDistance; // Dessiner une ligne verte jusqu'à la fin du raycast (pour le débogage) Debug.DrawRay(raycastStartPoint, raycastDirection * raycastDistance, Color.green); } // Ajouter les données du raycast à la liste raycastsData.Add(data); } return raycastsData; } } // Classe pour stocker les données du raycast touché public class SensorData { public int hitLayer; public float distance; }