Files
Learning-UnityNGO/Assets/CONTENT/FEATURES/DEV-TEST/Scripts/PlayerHealth.cs
T

63 lines
1.4 KiB
C#

using UnityEngine;
using Unity.Netcode;
using TMPro;
public class PlayerHealth : NetworkBehaviour
{
[SerializeField] private int maxHealth = 100;
[SerializeField] private TMP_Text healthText;
public NetworkVariable<int> currentHealth = new NetworkVariable<int>(
100,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Owner
);
public override void OnNetworkSpawn()
{
currentHealth.OnValueChanged += OnHealthChanged;
if (IsServer)
{
currentHealth.Value = maxHealth;
healthText.text = $"Health: {maxHealth}";
}
}
private void OnHealthChanged(int _previousValue, int _newValue)
{
Debug.Log($"Health changed from {_previousValue} to {_newValue}");
healthText.text = $"Health: {_newValue}";
}
public void TakeDamage(int _damageAmount)
{
if (!IsServer) return;
currentHealth.Value -= _damageAmount;
if (currentHealth.Value <= 0)
{
Die();
}
}
private void Die()
{
OnDiedClientRpc();
}
[ClientRpc]
private void OnDiedClientRpc()
{
Debug.Log($"Player {OwnerClientId} died");
gameObject.SetActive(false);
}
public override void OnNetworkDespawn()
{
currentHealth.OnValueChanged -= OnHealthChanged;
}
}