У моих врагов есть простой скрипт «OnTouch», который отбрасывает игрока назад, если он вступает в контакт. Затем игрок становится непобедимым на короткое время. Примерно так:
void OnTriggerEnter2D(Collider2D collider) {
if (collider.gameObject.CompareTag("Player")) {
if (Time.time > isInvincible) {
isInvincible = Time.time + invincibleTimer;
if (enemy.IsFacingRight) {
player.SetVelocity(knockback * Vector2.right);
} else {
player.SetVelocity(knockback * Vector2.left);
}
}
}
}
(SetVelocity - это просто метод, который я использую для установки .. скорости)
Проблема в том, что игрок становится непобедимым после того, как его оттолкнули. Будучи непобедимым, вы можете бежать на врага и оставаться там даже после того, как неуязвимый таймер истечет. Что, я думаю, имеет смысл, поскольку оно срабатывает только при входе.
Использование того же кода, но внутри OnTriggerStay2D, работает как положено. Вы отталкиваетесь, go непобедимы, бежите на врага, неуязвимые иссякают, а затем вы отталкиваетесь от врага.
Но, когда несколько врагов бегают с OnTriggerStay, сталкивающимся с различными объектами, вы чувствуете как бы это было плохо с точки зрения производительности? Есть ли более эффективный способ сделать это? Или TriggerStay - это путь к go?