@RZC

Почему враг умирает от разного количества ударов?

В рамках самообучения повторил скрипт атаки с одного ютуб канала. Скрипт выглядит вот так:
Скрипт игрока

void Update()
{if (timeBtwAttack <= 0)
        {
            timeBtwAttack = startTimeBtwAttack;
        }
        else
        {
            timeBtwAttack -= Time.deltaTime;
        }
        //нанесение удара
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Attack();   
        }
}
void Attack()
    {
        //Воспросизвести анимацию аттаки
        anim.SetTrigger("Attack");
        //обнаружить всех врагов в зоне действия
       Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);

        //Нанести урон
        for (int i = 0; i < hitEnemies.Length ; i++)
        {
            hitEnemies[i].GetComponent<FollowingEnemyHP>().GetDamage(firstAttackDamage);
        }
    }

    private void OnDrawGizmosSelected()
    {
        if (attackPoint == null)
            return;

        Gizmos.DrawWireSphere(attackPoint.position, attackRange);
    }


Гизмо установлен таким образом:
61ec4a7cf32de881238097.png
В качестве урона установлено значение 20. У врага установлено 100. Но бывает так, что при нанесении урона, враг умирает за 2 удара. Почему так?

Скрипт врага:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowingEnemyHP : MonoBehaviour
{
    private float currentHealth;
    public float health = 100;
    private float damage = 0.1f; // урон наносимый игроку


    private void Start()
    {
        currentHealth = health;
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.name == "Player")
        {
            collision.GetComponent<PlayerHP>().TakeDamage(damage);
        }
    }

    public void GetDamage(float amount)
    {
        currentHealth -= amount;
        if (currentHealth <= amount)
        {
            Die();
        }

        void Die()
        {
           
            Destroy(gameObject);

        }
    }
}





Подскажите, как исправить это недоразумение.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@MrGreger
Твой код атаки

if (Input.GetKeyDown(KeyCode.Space))
{
  Attack();   
}


находится вне кода твоего таймера и вызывается каждый кадр

if (timeBtwAttack <= 0)
{
  timeBtwAttack = startTimeBtwAttack;
     
  //нанесение удара 
  if (Input.GetKeyDown(KeyCode.Space))
  {
    Attack();   
  }
}
else
{
  timeBtwAttack -= Time.deltaTime;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы