Olá, acho que o Slider de vida do chefe no Inspector não está sendo acessado corretamente, então criei um método para acessá-lo via script, e isso funcionou para alterar o valor do Slider. Não sei por que diretamente pelo Inspector não está funcionando para mudar o valor da barra de vida do chefe. Em relação à mudança de cor do Slider, acredito que ele esteja ficando transparente por algum motivo. Verifiquei tudo no Inspector, revisei e fiz o debug do script. Então, criei um método para acessá-lo diretamente via script, e funcionou para mudar o valor da Slider, mas a vida fica transparente quando a cor muda.
Deixei apenas os métodos que estão usando a parte das variáveis 'Slider_lifeBar, Image_Life, MaxLifeColor e MinLifeColor'. Mas posso manda o Script todo. As partes comentadas são porquê eu estava testando o código para ver qual era o erro aí comentei e descomentei varias partes.
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;
public class BossControl : MonoBehaviour, IKillable
{
[HideInInspector]
public BossSpawner MySpawn;
[Tooltip("Suavisação para girar")]
public float SmoothSpinSpeed = 10f;
[Tooltip("Kit médico")]
public GameObject LootDrop_MedKit;
[Tooltip("Som de morte")]
public AudioClip SFXDead;
public Slider Slider_lifeBar;
public Image image_Life;
public Color MaxLifeColor, MinLifeColor;
public bool ShowGizmos;
private EnemyStatus bossStatus;
private CharacterMovement bossMovement;
private CharacterAnimator bossAnimation;
private UIManager _UIManager;
private Transform player;
private NavMeshAgent agent;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
if (player == null)
{
Debug.LogError("Objeto do player não encontrado na cena!");
return;
}
_UIManager = FindObjectOfType<UIManager>();
agent = GetComponent<NavMeshAgent>();
bossStatus = GetComponent<EnemyStatus>();
bossMovement = GetComponent<CharacterMovement>();
bossAnimation = GetComponent<CharacterAnimator>();
StartLifeBar();
}
// Metodo criado para acessar a slider barra de vida diretamente
private void StartLifeBar()
{
Slider_lifeBar = transform.GetChild(1).transform.GetChild(0).GetComponent<Slider>();
// Configura o Slider
Slider_lifeBar.maxValue = bossStatus.MaxLife;
Slider_lifeBar.value = Slider_lifeBar.maxValue;
}
private void AttacksPlayer()
{
int currentDamage = Random.Range(bossStatus.MinDamage, bossStatus.MaxDamage);
player.GetComponent<PlayerControl>().TakeDamage(currentDamage);
}
public void TakeDamage(int damageAmount)
{
bossStatus.CurrentLife -= damageAmount;
//Slider_lifeBar.value = bossStatus.CurrentLife;
UpdateUILife();
if (bossStatus.CurrentLife < 0)
{
ToDie();
}
}
private void UpdateUILife()
{
Slider_lifeBar.value = bossStatus.CurrentLife;
// Image image_Life = Slider_lifeBar.transform.GetChild(1).transform.GetChild(0).GetComponent<Image>();
// float lifePercentage = (float)bossStatus.CurrentLife / bossStatus.MaxLife;
// Debug.Log($"BOSS LifePercentage: {lifePercentage}");
// Color currentLifeColor = Color.Lerp(MinLifeColor, MaxLifeColor, lifePercentage);
// image_Life.color = currentLifeColor;
}
}