Unity3D как сделать ограничение по нажатию клавиши?

как сделать ограничение по нажатию клавиши в Unity 3D например пробел только 1 раз в секунду? версия 2019


Ответы (2 шт):

Автор решения: Andrey

Самое простое это что то типа такого

bool spacePressed;
float spaceTimer;
void Update() {
    if (spacePressed) {
        spaceTimer += Time.deltaTime;
        if (spaceTimer >= 1) {
            spacePressed = false;
        }
    }
}

И если spacePressed == true, то не давать прыгать

Ну и после прыжка обнулять таймер

→ Ссылка
Автор решения: singletonsEnjoyer

Я так понимаю, таких задержек у тебя в игре много. Напиши класс Cooldown, в котором у тебя есть корутина, запрещающая сделать что либо на определённое время, а потом снимающая запрет. Имею ввиду что-то подобное:

public class Cooldown : MonoBehaviour
{
    public float cooldownTime { get; set; }
    public bool canDoAction{ get; set; }
    public void StartTimer() => StartCoroutine(ICooldown());
    private void Start()
    {
        canDoAction = true;
    }
    private IEnumerator ICooldown()
    {
        canDoAction = false;
        yield return new WaitForSeconds(cooldownTime);
        canDoAction = true;
    }
}

В нужном классе создаёшь экземпляр класса Cooldown, при этом в проверку нажатия на кнопку добавляешь условие что бы canDoAction было true. Как-то так:

public class Player : MonoBehaviour
{
[SerializeField] private Cooldown _shootCooldown;
..... some variables, methods.
private void Update()
{
if(Input.GetKeyDown(KeyCode.Z) && _shootCooldown.canDoAction)
{
Shoot();
_shootCooldown.StartTimer();
}

}

}

Такая система довольно гибкая, тебе не придётся писать кучу лишних корутин в каждый класс, вместо этого ты просто создаёшь новый экземпляр класса Cooldown и добавляешь проверку. Главное не забудь скрипт Cooldown повесить на нужный объект.

→ Ссылка