private void Update() { if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << Layer.SELECTABLE_GAME_OBJECT)) { if (hit.collider) { var eventArgs = new EntityEventArgs(hit.collider.gameObject); if (Input.GetMouseButtonDown(0)) { OnSelectedEntityChanged?.Invoke(this, eventArgs); } if (entityArgs is null || !entityArgs.Equals(eventArgs)) { entityArgs = eventArgs; OnHoverEntityEnter?.Invoke(this, entityArgs); } } } else { if (entityArgs != null) { OnHoverEntityExit?.Invoke(this, entityArgs); entityArgs = null; } } }