Files
Learning-UnityNGO/Assets/CONTENT/FEATURES/DEV-TEST/Scripts/PlayerController.cs
T

77 lines
2.1 KiB
C#

using Unity.Netcode;
using UnityEngine;
public class PlayerController : NetworkBehaviour
{
[SerializeField] private float moveSpeed = 5f;
[SerializeField] private Camera playerCamera;
[SerializeField] private Camera playerHandCamera;
[SerializeField] private GameObject tpvHands;
[SerializeField] private GameObject fpvHands;
[SerializeField] private float mouseSensitivity = 2f;
[SerializeField] private Transform cameraRoot;
float verticalRotation = 0f;
public override void OnNetworkSpawn()
{
if (playerCamera != null)
{
playerCamera.enabled = IsOwner;
playerHandCamera.enabled = IsOwner;
playerCamera.GetComponent<AudioListener>().enabled = IsOwner;
fpvHands.SetActive(IsOwner);
tpvHands.SetActive(!IsOwner);
}
if (IsOwner)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
Color playerColor = IsOwner ? Color.blue : Color.red;
foreach (MeshRenderer meshRenderer in GetComponentsInChildren<MeshRenderer>())
{
meshRenderer.material.color = playerColor;
}
// if (IsOwner)
// {
// transform.position = new Vector3(Random.Range(-10f, 10f), 1f, Random.Range(-10f, 10f));
// }
}
public void Update()
{
if(!IsOwner) return;
HandleMovement();
HandleRotation();
}
private void HandleMovement()
{
float _moveX = Input.GetAxis("Horizontal");
float _moveZ = Input.GetAxis("Vertical");
Vector3 move = transform.right * _moveX + transform.forward * _moveZ;
transform.position += move * moveSpeed * Time.deltaTime;
}
private void HandleRotation()
{
float _mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float _mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(Vector3.up * _mouseX);
verticalRotation -= _mouseY;
verticalRotation = Mathf.Clamp(verticalRotation, -90f, 90f);
cameraRoot.localRotation = Quaternion.Euler(verticalRotation, 0f, 0f);
}
}