using UnityEngine; using Unity.Netcode; using TMPro; public class PlayerHealth : NetworkBehaviour { [SerializeField] private int maxHealth = 100; [SerializeField] private TMP_Text healthText; public NetworkVariable currentHealth = new NetworkVariable( 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; } }