Как я могу подключить кнопку к функции?

#unity3d

#unity3d

Вопрос:

у нас в игре есть кнопка dash. Если мы нажмем кнопку, кнопка dash будет работать хорошо, но проблема в том, что если мы нажмем в любом месте экрана, она тоже будет работать! Мы хотим работать с этой функцией только с помощью кнопки. Кто-нибудь, пожалуйста, помогите нам?

Код:

 public void Dash()
{
    if (Input.GetMouseButtonDown(0))

    {
        activeMoveSpeed = dashSpeed;
        dashCounter = dashLength;
    }
    if (dashCounter > 0)
    {
        canShoot = false;
        dashCounter -= Time.deltaTime;
        if (dashCounter <= 0)
        {
            canShoot = false;
            activeMoveSpeed = speed;
            dashCoolCounter = dashCoolDown;
        }
    }
    if (dashCoolCounter > 0)
    {
        canShoot = false;
        dashCoolCounter -= Time.deltaTime;
    }
}

private void FixedUpdate()
{
    Movement();
    Dash();
}
 

Кнопка и игра

Кнопка

Комментарии:

1. Ваша проблема, вероятно, связана с проверкой, находится ли мышь в этом фрейме на кнопке. Разделите свой код на выполнение тире. И проверка на наличие того, что обычно находится, скажем, в обновлении. Затем ваша кнопка пользовательского интерфейса может вызвать код dash все остальное может вызвать проверку на dash которая если будет удовлетворена вызовет код dash

2. По какой-то причине вы звоните Dash при каждом FixedUpdate звонке и проверяете там if (Input.GetMouseButtonDown(0)) , что будет верно в любом месте экрана

Ответ №1:

Указанная вами функция OnClick будет вызываться при каждом нажатии кнопки.

В настоящее время вы вообще не используете кнопку. Я думаю, вы имели в виду что-то вроде этого ( StartDash() это функция, которая должна быть выбрана в OnClick):

 public void StartDash()
{
    activeMoveSpeed = dashSpeed;
    dashCounter = dashLength;
}

private void DoDash()
{
    if (dashCounter > 0)
    {
        canShoot = false;
        dashCounter -= Time.deltaTime;
        if (dashCounter <= 0)
        {
            canShoot = false;
            activeMoveSpeed = speed;
            dashCoolCounter = dashCoolDown;
        }
    }
    if (dashCoolCounter > 0)
    {
        canShoot = false;
        dashCoolCounter -= Time.deltaTime;
    }
}

private void FixedUpdate()
{
    Movement();
    DoDash();
}
 

Взгляните на соответствующие страницы в документации Unity: