JacopoLevati-Creator cecfdff0e3 funziona tutto
2025-03-18 16:11:24 +01:00

90 lines
2.6 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(LineRenderer))]
public class EyeTrackingRay : MonoBehaviour
{
[SerializeField]
private float rayDistance = 1.0f;
[SerializeField]
private float rayWidth = 0.01f;
[SerializeField]
private LayerMask layersToInclude; // Questo verrà sovrascritto nel codice
[SerializeField]
private Color rayColorDefaultState = Color.yellow;
[SerializeField]
private Color rayColorHoverState = Color.red;
[SerializeField]
private float moveSpeed = 2.0f; // Velocità di movimento
private LineRenderer lineRenderer;
private List<EyeInteractable> eyeInteractables = new List<EyeInteractable>();
void Start()
{
lineRenderer = GetComponent<LineRenderer>();
SetupRay();
}
void SetupRay()
{
lineRenderer.useWorldSpace = false;
lineRenderer.positionCount = 2;
lineRenderer.startWidth = rayWidth;
lineRenderer.endWidth = rayWidth;
lineRenderer.startColor = rayColorDefaultState;
lineRenderer.endColor = rayColorDefaultState;
lineRenderer.SetPosition(0, transform.position);
lineRenderer.SetPosition(1, new Vector3(transform.position.x, transform.position.y, transform.position.z + rayDistance));
}
void FixedUpdate()
{
RaycastHit hit;
Vector3 rayCastDirection = transform.TransformDirection(Vector3.forward);
// 🔹 Forza il Raycast a colpire SOLO il layer delle Frecce
int arrowsLayerMask = LayerMask.GetMask("Arrows");
bool hasHit = Physics.Raycast(transform.position, rayCastDirection, out hit, rayDistance, arrowsLayerMask);
if (hasHit && hit.transform.GetComponent<EyeInteractable>() != null)
{
UnSelect();
lineRenderer.startColor = rayColorHoverState;
lineRenderer.endColor = rayColorHoverState;
var eyeInteractable = hit.transform.GetComponent<EyeInteractable>();
if (!eyeInteractables.Contains(eyeInteractable))
eyeInteractables.Add(eyeInteractable);
eyeInteractable.IsHovered = true;
}
else
{
lineRenderer.startColor = rayColorDefaultState;
lineRenderer.endColor = rayColorDefaultState;
UnSelect(true);
}
}
void UnSelect(bool clear = false)
{
foreach (var interactable in eyeInteractables)
{
interactable.IsHovered = false;
}
if (clear)
{
eyeInteractables.Clear();
}
}
}