Unity3D как сделать ограничение по нажатию клавиши?
как сделать ограничение по нажатию клавиши в Unity 3D например пробел только 1 раз в секунду? версия 2019
Ответы (2 шт):
Самое простое это что то типа такого
bool spacePressed;
float spaceTimer;
void Update() {
if (spacePressed) {
spaceTimer += Time.deltaTime;
if (spaceTimer >= 1) {
spacePressed = false;
}
}
}
И если spacePressed == true, то не давать прыгать
Ну и после прыжка обнулять таймер
Я так понимаю, таких задержек у тебя в игре много. Напиши класс 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 повесить на нужный объект.