Если CurrentHealth
не изменен из другого скрипта, единственная причина, по которой работоспособность уменьшается, заключается в том, что ссылка на средство визуализации строк не отключена.Поэтому убедитесь, что вы указали правильный линейный рендер и что он отключен, когда поблизости нет врагов.
Обратите внимание, что ваш текущий подход требует, чтобы у вас был только один линейный рендер, который включался и выключался в зависимости от того, враг лив поле зрения.Это может стать грязным.Я думаю, что лучшим подходом было бы вызвать метод TakeDamage
непосредственно в сценарии здоровья, когда игрок находится в поле зрения:
using UnityEngine;
using UnityEngine.UI;
public class Health : MonoBehaviour
{
public Text HealthText;
public Slider HealthSlider;
public float MaxHealth = 100;
public float CurrentHealth = 100;
public void TakeDamage()
{
if (CurrentHealth > 0)
{
CurrentHealth -= Time.deltaTime * 10;
}
}
private void Update()
{
HealthUI();
}
public void HealthUI()
{
HealthSlider.value = CurrentHealth / MaxHealth;
HealthText.text = "HEALTH " + ((int)(CurrentHealth / MaxHealth * 100)).ToString() + "%";
}
}