Rect.Contains(Event.current.mousePosition) проверяет только один прямоугольник. Как заставить его проверить их всех?

Код, который генерирует ошибку:

    void DrawInventory(){
    int i = 0;
    Event e = Event.current;

    for (int x = 0; x < slotsX; x++)
    {
        for (int y = 0; y < slotsY; y++)
        {
            Rect slotRect = new Rect(x * 60, y * 60, 32, 32);
            GUI.Box(slotRect, "", guiSlots.GetStyle("Slot"));
            slots[i] = inventory[i];
            if (slots[i].itemName != null)
            {
                GUI.DrawTexture(slotRect, slots[i].itemIcon);
                if (slotRect.Contains(e.mousePosition))
                {
                    Rect Bor = new Rect((slotsX * 32)+(20 + (40 * x)), (i * (Screen.height / slots.Count)) + ((Screen.height / slots.Count) / 4), 200, 32);

                    GUI.Box(Bor, inventory[i].itemName, guiSlots.GetStyle("Border"));
                    if (!RMBtip)
                    {
                        GUI.Box(new Rect(252, (i * (Screen.height / slots.Count)) + ((Screen.height / slots.Count) / 4), 350, 32), "Press 'Right Mouse Button' to show a description", guiSlots.GetStyle("Border"));
                    }
                    if (e.button == 1)
                    {
                        GUI.Box(new Rect(252, (i * (Screen.height / slots.Count)) + ((Screen.height / slots.Count) / 4), 200, 32), inventory[i].itemDesc, guiSlots.GetStyle("Border"));
                        RMBtip = true;
                    }
                    if (e.button == 0 && e.type == EventType.mouseDrag && !draggingItem)
                    {
                        draggingItem = true;
                        prevIndex = i;
                        draggedItem = slots[i];
                    }
                    if (e.type == EventType.mouseUp && draggingItem)
                    {
                        inventory[prevIndex] = inventory[i];
                        inventory[i] = draggedItem;
                        draggingItem = false;
                        draggedItem = null;
                    }
                    if (Input.GetKeyDown(KeyCode.Q))
                    {
                        inventory[i] = new Item();
                    }
                }
            }
            else
            {
                if (slotRect.Contains(e.mousePosition))
                {
                    if (e.type == EventType.mouseUp && draggingItem)
                    {
                        inventory[prevIndex] = new Item();
                        inventory[i] = draggedItem;
                        draggingItem = false;
                        draggedItem = null;
                    }
                }
                else
                {
                        if (e.type == EventType.mouseUp && draggingItem && !slotRect.Contains(e.mousePosition))
                        {
                            inventory[prevIndex] = new Item();
                            Wood9clone = Instantiate(draggedItem.itemPhysic, new Vector3(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y), transform.rotation) as GameObject;
                            draggingItem = false;
                            draggedItem = null;
                        }
                }
            }
            i++;
        }
    }
}

Это часть моего инвентаря. Он должен создавать экземпляр GameObject, когда mousePosition находится за пределами слотов, но он создает экземпляр Gameobject, даже если mousePosition находится внутри слота. Нашел проблему: проверяет только последний слот. Как заставить его проверять каждый слот?

0 ответов

Другие вопросы по тегам