MultiplayerBasics/Assets/PlayerMovement.cs

45 lines
969 B
C#

using Mirror;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.InputSystem;
public class PlayerMovement : NetworkBehaviour
{
[SerializeField] private NavMeshAgent _navMeshAgent;
private Camera _camera;
private Mouse _mouse;
#region Server
[Command] private void CmdMove(Vector3 destination)
{
_navMeshAgent.SetDestination(destination);
}
#endregion
#region Client
public override void OnStartAuthority()
{
base.OnStartAuthority();
_camera = Camera.main;
_mouse = Mouse.current;
}
[ClientCallback]
private void Update()
{
if (!isOwned) return;
if (!_mouse.leftButton.wasPressedThisFrame) return;
Ray ray = _camera.ScreenPointToRay(new(_mouse.position.x.value, _mouse.position.y.value, 0));
if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity))
{
CmdMove(hit.point);
}
}
#endregion
}