private void FixedUpdate() { RaycastHit[] hits; Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); bool tagDetected = false; hits = Physics.RaycastAll(ray, 100); if (hits.Length > 0) { int currentPriority = int.MaxValue; foreach (RaycastHit hit in hits) { int priority = System.Array.IndexOf(interactionTagsInPriorityOrder, hit.transform.tag); if (priority >= 0 && priority < currentPriority) { currentPriority = priority; tagDetected = true; } } if (tagDetected) { string tagPrioritary = null; for (int i = 0; i < hits.Length; i++) { if (hits[i].transform.tag == interactionTagsInPriorityOrder[currentPriority]) { Transform objectHit = hits[i].transform; if (!justChangeCursor) { crosshairInstance.transform.position = hits[i].point; } tagPrioritary = hits[i].transform.tag; if (Sinput.GetButtonDown(leftMouseInput)) { crowdSystem.AssignTargetToRandomElement(objectHit); onElementClicked?.Invoke(); } break; } } //Debug.Log(tagPrioritary); if (!hovering && tagPrioritary != "RaycastMinion") { onElementHover?.Invoke(); hovering = true; //Debug.Log("HOVER"); if (!justChangeCursor) { crosshairInstance.SetActive(true); } else { Cursor.SetCursor(aimCursor, new Vector2(aimCursor.width / 2, aimCursor.height / 2), CursorMode.Auto); } } } else { if (hovering) { onElementUnhover.Invoke(); //Debug.Log("UNHOVER"); hovering = false; if (!justChangeCursor) { crosshairInstance.SetActive(false); } else { Cursor.SetCursor(defaultCursor, Vector2.zero, CursorMode.Auto); } } } } }