При нажатии на кнопку иногда не срабатывает удар в работе ближнего боя Unity
Имеется скрипт для ближнего боя в 2д раннере, все вроде бы корректно написал и он даже работает,но как то коряво. При нажатии на кнопку иногда не срабатывает удар(ну это по моим наблюдениям, возможно там что то другое происходит).
Как это исправить?
private bool isAttacking = false;
private float attackTimer = 0f;
private float attackReset = 0.2f;
public GameObject attackPoint;
private void Awake()
{
attackPoint.SetActive(false);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A) && !isAttacking)
{
isAttacking = true;
attackPoint.SetActive(true);
attackTimer = attackReset;
Reset();
}
else
{
isAttacking = false;
attackPoint.SetActive(false);
}
}
public void Reset()
{
if (attackTimer > 0)
{
attackTimer -= Time.deltaTime;
}
if (attackTimer <= 0)
{
isAttacking = false;
}
}
}
Ответы (1 шт):
У вас несколько странная логика, непонятно зачем вообще таймер, ведь после установки isAttacking в true следующий же вызов Update пойдёт в ветку else и всё сбросит. А следующий Update может произойти очень быстро.
Я не очень знаю как правильно в Unity всё делается, но чисто по логике я бы сделал такую логику:
if (Input.GetKeyDown(KeyCode.A))
{
if(!isAttacking)
{
isAttacking = true;
attackPoint.SetActive(true);
attackTimer = attackReset;
}
else
{
Reset();
}
}
else
{
isAttacking = false;
attackPoint.SetActive(false);
}
Я бы и название функции Reset поменял, это же не сброс (безусловный), это что-то типа DecreaseAttackTimer.
Хотя по-хорошему тут всё мне кажется нужно переписывать по-другому как-то.