Двойной клик против одного клика - PullRequest
0 голосов
/ 02 октября 2019

Я делаю систему инвентаризации в Unity. Одиночные клики «подбирают» предметы и помещают их где-то в ваш инвентарь, в то время как двойные щелчки должны экипировать предмет.

public void OnPointerDown(PointerEventData eventData)
    {
        if (this.item != null)
        {
            UICraftResult craftResult = GetComponent<UICraftResult>();
            if (eventData.clickCount == 2)
            {
                EquipItem(this.item);
            }
            else if (craftResult != null && this.item != null && selectedItem.item == null)
            {
                craftResult.PickItem();
                selectedItem.UpdateItem(this.item);
                craftResult.ClearSlots();
            }
            else if (!craftingResultSlot)
            {
                if (selectedItem.item != null)
                {
                    Item clone = new Item(selectedItem.item);
                    selectedItem.UpdateItem(this.item);
                    UpdateItem(clone);
                }
                else
                {
                    selectedItem.UpdateItem(this.item);
                    UpdateItem(null);
                }
            }

По какой-то причине только тройные клики вызывают «if (eventData.clickCount == 2». )" проверить. Также один щелчок всегда будет срабатывать, даже когда я дважды щелкну. Может кто-нибудь помочь? я

1 Ответ

0 голосов
/ 02 октября 2019

Каждый щелчок запускается индивидуально, поэтому ваша локальная переменная eventData будет сбрасываться при каждом запуске;это зависит от события.
Попробуйте создать глобальную переменную, которую вы можете увеличивать, а затем считывать из нее при каждом запуске события.

public class InventoryManager : MonoBehaviour {
    int slotID = -1; //id of the previously clicked slot

    public void OnPointerClick(PointerEventData eventData) {
        if (this.slotID != selectedItem.id) {
            this.slotID = selectedItem.id;
            //your code for a single click
        } else {
            this.slotID = -1; //clear the slot id;
            //your code for a double click
        }
    }
}

Теперь все еще остается проблема синхронизации: таким образом, она всегда будет запускатьсобытие одиночного щелчка, а затем событие двойного щелчка. Если вы хотите условно пропустить событие одиночного щелчка, вы можете подождать секунду, прежде чем инициировать событие одиночного щелчка. Надеемся, что событие одиночного щелчка не так много, поэтому вы можете настроить обработчик двойного щелчка, чтобы отменить действия обработчика одного щелчка.
Например, если элемент был выбран, и пользователь сразу же щелкает тот же слот во второй раз, вы можетепросто поместите предмет обратно в слот и выполните событие для двойного щелчка. Таймер, вероятно, не является обязательным, если можно отменить один клик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...