Added PlayerHealth and PlayerShoot
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user