using UnityEngine;
namespace MS_Outline.Demo
{
///
/// Enables glow on any object with GlowOutlineTarget when the mouse hovers over it.
/// Attach this to any active GameObject in the scene (e.g., Main Camera).
///
public class MouseHoverGlow : MonoBehaviour
{
[Tooltip("The camera to use for raycasting. If not set, Camera.main will be used.")]
[SerializeField] private Camera raycastCamera;
[Tooltip("Maximum distance for the raycast.")]
[SerializeField] private float maxRaycastDistance = 100f;
[Tooltip("Layer mask for the raycast. Leave as Everything to hit all layers.")]
[SerializeField] private LayerMask layerMask = ~0;
private GlowOutlineTarget currentHoveredTarget;
private void Start()
{
if (raycastCamera == null)
raycastCamera = Camera.main;
}
private void Update()
{
if (raycastCamera == null)
return;
Ray ray = raycastCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit, maxRaycastDistance, layerMask))
{
var target = hit.collider.GetComponentInParent();
if (target != currentHoveredTarget)
{
// Disable glow on previous target
if (currentHoveredTarget != null)
currentHoveredTarget.DisableGlow();
// Enable glow on new target
currentHoveredTarget = target;
if (currentHoveredTarget != null)
currentHoveredTarget.EnableGlow();
}
}
else
{
// Mouse is not over any collider
if (currentHoveredTarget != null)
{
currentHoveredTarget.DisableGlow();
currentHoveredTarget = null;
}
}
}
private void OnDisable()
{
// Clean up when disabled
if (currentHoveredTarget != null)
{
currentHoveredTarget.DisableGlow();
currentHoveredTarget = null;
}
}
}
}