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);
                    }
                }
            }
        }
    }