Files
gpd-924/Networking/Assets/Scripts/NetworkPlayer.cs
T

73 lines
2.0 KiB
C#

using System;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;
namespace DefaultNamespace
{
public class NetworkPlayer : NetworkBehaviour
{
[Header( "Player Settings" )]
[SerializeField] private float speed = 10.0f;
[SerializeField] private float initialHealth = 100.0f;
[Header( "Elements")]
[SerializeField] private Camera playerCamera;
[SerializeField] private Canvas playerCanvas;
[SerializeField] private Image playerHealthBar;
[Header( "Prefabs" )]
[SerializeField] private NetworkObject projectilePrefab;
private NetworkVariable<float> _health = new NetworkVariable<float>();
public override void OnNetworkSpawn()
{
playerCamera.gameObject.SetActive(IsLocalPlayer);
playerCanvas.gameObject.SetActive(IsLocalPlayer);
if (IsLocalPlayer)
{
_health.OnValueChanged += OnValueChanged;
}
if (IsServer)
{
_health.Value = initialHealth;
}
}
public override void OnNetworkDespawn()
{
if (IsLocalPlayer)
{
_health.OnValueChanged -= OnValueChanged;
}
}
private void OnValueChanged(float previousValue, float newValue)
{
playerHealthBar.fillAmount = newValue / initialHealth;
}
private void Update()
{
if (!IsLocalPlayer) return;
Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
transform.Translate(input * (speed * Time.deltaTime));
if (Input.GetButtonDown("Fire1"))
{
FireProjectileRpc();
}
}
[Rpc(SendTo.Server)]
private void FireProjectileRpc()
{
NetworkObject projectile = Instantiate(projectilePrefab, transform.position, Quaternion.identity);
projectile.Spawn(true);
}
}
}