Проблема при попытке обнаружить нажатие кнопки одним пальцем при нажатии более - Unity - PullRequest
1 голос
/ 19 сентября 2019

Расширение этого вопроса. - здесь вы также можете найти мой код перед этим новым небольшим изменением.

В моей игре на платформе У меня есть персонаж-шар, который перемещается нажатием трех кнопок : «MoveRight» , чтобы сделатьон перемещается вправо, «MoveLeft» , чтобы переместить его влево, и кнопку «Jump» , которая выдаствертикальная сила к мячу, поэтому он будет прыгать.

Чтобы переместить персонажа, я добавляю силу при каждом нажатии кнопки .Сделав это, я понял, что игрок может «обманывать» разными способами .

На платформе довольно много препятствий, которые очень трудно пройти, потому что скорость вполне достаточна .Нажав двумя пальцами на одну и ту же кнопку, я бы добавил двойную горизонтальную силу к шару , и он бы увеличился в раза в два раза , и намного легче прошел бы уровень.

Кроме того, в некоторых случаях у игрока есть время дважды прыгнуть и подняться на намного выше, чем обычно.

Чтобы попытаться избежать этой проблемы, я добавил в OnPointerDown () и OnPointerUp () методы переменную, значение которойпредполагается:

  • 0 , когда нет пальцев нажимают левую и правую кнопки.

  • 1 , когда один палец нажимает кнопки.

  • > 1 , когда больше пальцев нажимают кнопки (хотя я бы не хотел, чтобы это произошло, но должен был справиться с этим, чтобы не было ошибок или изменений в скорости персонажа).

Это яКод, где это обрабатывается :

public void OnPointerDown(PointerEventData eventData)
    {
        if (fingersOnButton == 0)
        {
            fingersOnButton++;
            if (movesLeft)
            {
                playerMovement.TriggerMoveLeft();
            }
            else
            {
                playerMovement.TriggerMoveRight();
            }
        }
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        fingersOnButton--;
        if (movesLeft)
        {
            playerMovement.StopMoveLeft();
        } else
        {
            playerMovement.StopMoveRight();
        }
    }

Примечание: Переменная fingerOnButton установлено на 0 при запуске.

Теперь, когда я нажимаю кнопку двумя пальцами одновременно , она не удваивает скорость (как я хотел), но когда я ее выпускаюс обоими пальцами какая-то сила застревает, как будто я нажимаю другую кнопку (одним пальцем).

Я пытался изменить некоторые вещи в этих двух методах, но ничего не помогло.

Любая информация или помощь о том, как это исправить, очень ценится!

1 Ответ

1 голос
/ 19 сентября 2019

Вам необходимо всегда обновлять счетчик, когда указатель идет вверх или вниз, и вы хотите вызывать StopMoveX только тогда, когда fingersOnButton переходит в 0:

public void OnPointerDown(PointerEventData eventData)
{
    fingersOnButton++;

    if (fingersOnButton == 1)
    {
        if (movesLeft)
        {
            playerMovement.TriggerMoveLeft();
        }
        else
        {
            playerMovement.TriggerMoveRight();
        }
    }
}

public void OnPointerUp(PointerEventData eventData)
{
    fingersOnButton--;

    if (fingersOnButton == 0)
    {
        if (movesLeft)
        {
            playerMovement.StopMoveLeft();
        } else
        {
            playerMovement.StopMoveRight();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...