88 lines
2.4 KiB
C#
88 lines
2.4 KiB
C#
using System;
|
|
using Unity.Netcode;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.UI;
|
|
|
|
namespace DefaultNamespace
|
|
{
|
|
public class NetworkPlayer : NetworkBehaviour
|
|
{
|
|
[Header("Player Values")]
|
|
[SerializeField] private float speed = 10f;
|
|
[SerializeField] private float initialHealth = 100.0f;
|
|
[SerializeField] private NetworkObject bulletPrefab;
|
|
|
|
[Header("Input")]
|
|
[SerializeField] private InputActionProperty moveInput;
|
|
[SerializeField] private InputActionProperty fireInput;
|
|
|
|
[Header("Elements")]
|
|
[SerializeField] private Camera playerCamera;
|
|
[SerializeField] private Canvas playerCanvas;
|
|
[SerializeField] private Image playerHealthBar;
|
|
|
|
private NetworkVariable<float> _health = new NetworkVariable<float>();
|
|
|
|
public override void OnNetworkSpawn()
|
|
{
|
|
// playerCamera.gameObject.SetActive(IsLocalPlayer);
|
|
// playerCanvas.gameObject.SetActive(IsLocalPlayer);
|
|
|
|
|
|
if (IsLocalPlayer)
|
|
{
|
|
_health.OnValueChanged += OnHealthChanged;
|
|
|
|
moveInput.action.Enable();
|
|
|
|
fireInput.action.performed += OnFired;
|
|
fireInput.action.Enable();
|
|
}
|
|
|
|
if (IsServer)
|
|
{
|
|
_health.Value = initialHealth;
|
|
}
|
|
}
|
|
|
|
public override void OnNetworkDespawn()
|
|
{
|
|
|
|
if (IsLocalPlayer)
|
|
{
|
|
_health.OnValueChanged -= OnHealthChanged;
|
|
|
|
moveInput.action.Disable();
|
|
|
|
fireInput.action.performed -= OnFired;
|
|
fireInput.action.Disable();
|
|
}
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
if (!IsLocalPlayer) return;
|
|
|
|
Vector2 input = moveInput.action.ReadValue<Vector2>() * (speed * Time.deltaTime);
|
|
transform.Translate(input.x, 0.0f, input.y);
|
|
}
|
|
|
|
private void OnHealthChanged(float previousValue, float newValue)
|
|
{
|
|
// playerHealthBar.fillAmount = newValue / initialHealth;
|
|
}
|
|
|
|
private void OnFired(InputAction.CallbackContext obj)
|
|
{
|
|
SpawnBulletRpc();
|
|
}
|
|
|
|
[Rpc(SendTo.Server)]
|
|
private void SpawnBulletRpc()
|
|
{
|
|
NetworkObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
|
|
bullet.Spawn(true);
|
|
}
|
|
}
|
|
} |