У меня очень простая 2D-игра, в которой игрок находится слева, а враги - справа и движутся к игроку.
Игрок будет атаковать врагов мечом,и у меня есть текущая функция для него:
[SerializeField] int damage = 1;
[SerializeField] Transform attackPos;
[SerializeField] LayerMask whatIsEnemy;
[SerializeField] float attackRangeX;
[SerializeField] float attackRangeY;
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
DamageEnemies();
}
}
private void DamageEnemies()
{
Collider2D[] enemiesToDamage = Physics2D.OverlapBoxAll(attackPos.position, new Vector2(attackRangeX, attackRangeY), 0, whatIsEnemy);
for (int i = 0; i < enemiesToDamage.Length; i++)
{
enemiesToDamage[i].GetComponent<EnemyController>().TakeDamage(damage);
}
}
объект игры attackPos просто расположен перед игроком.AttackRangeX и Y напоминают квадрат перед игроком.
Проблема с этой настройкой заключается в том, что при нажатии клавиши атаки она будет взаимодействовать с врагами внутри только в этот момент времени, который является однимframe.
Как активировать столкновение в течение 5 секунд, но наносить урон только новым врагам один раз .Я бы не хотел, чтобы он продолжал наносить урон врагам, которых он уже повредил.