using System; using UnityEngine; using UnityEngine.EventSystems; public class MouseSelection : MonoBehaviour { [SerializeField] private LayerMask _selectableLayerMask; private Transform _selection; private RaycastHit _raycastHit; public event EventHandler OnSelectedObjectChanged; public class OnSelectedObjectChangedEventArgs : EventArgs { public Transform SelectedObject; } public static MouseSelection Instance { get; private set; } private void Awake() { if (Instance != null) { Debug.Log("There's more than one player instance"); } Instance = this; } void Update() { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (!EventSystem.current.IsPointerOverGameObject() && Physics.Raycast(ray, out _raycastHit, 100f, _selectableLayerMask)) { OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = _raycastHit.transform }); // _hightlight = _raycastHit.transform; // if (_hightlight.CompareTag("Selectable") && _hightlight != _selection) // { // if (_hightlight.gameObject.GetComponent() != null) // { // _hightlight.gameObject.GetComponent().enabled = true; // } // else // { // var outline = _hightlight.gameObject.AddComponent(); // outline.enabled = true; // _hightlight.gameObject.GetComponent().OutlineColor = Color.yellow; // _hightlight.gameObject.GetComponent().OutlineWidth = 7f; // } // } // else // { // _hightlight = null; // } } else { OnSelectedObjectChanged?.Invoke(this, new OnSelectedObjectChangedEventArgs() { SelectedObject = null }); } } }