104 lines
3.5 KiB
C#
104 lines
3.5 KiB
C#
|
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<Vector2> raycastConfigurations = new List<Vector2>()
|
||
|
{
|
||
|
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<SensorData> GetObserverRaycast()
|
||
|
{
|
||
|
List<SensorData> raycastsData = new List<SensorData>();
|
||
|
|
||
|
// 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;
|
||
|
}
|