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 находится внутри слота. Нашел проблему: проверяет только последний слот. Как заставить его проверять каждый слот?