using UnityEngine; using Mirror; using UnityEngine.InputSystem; using Cinemachine; public class NetWorkPlayer : NetworkBehaviour { public CharacterController characterController; public InputActionAsset inputAction; public Animator animator; public Transform forward; public Transform model; public CinemachineVirtualCamera vCam; public CursorLockMode cursorLock; public float moveSpeed = 5f; public float jumpSpeed = 2f; public float turnSpeed = 10f; public float gravity = 10f; Vector3 moveDir; Vector2 moveInput; public override void OnStartLocalPlayer() { Cursor.lockState = cursorLock; vCam.Priority = 15; inputAction.FindAction("Move").started += OnMove; inputAction.FindAction("Move").performed += OnMove; inputAction.FindAction("Move").canceled += OnMove; inputAction.FindAction("Jump").performed += OnJump; inputAction.FindAction("Esc").performed += OnEsc; inputAction.Enable(); } private void Update() { if (!isLocalPlayer) return; moveDir = new Vector3(moveInput.x, moveDir.y, moveInput.y); forward.eulerAngles = new Vector3(0, vCam.transform.eulerAngles.y, 0); moveDir = forward.TransformDirection(moveDir); if (moveInput != Vector2.zero) { animator.SetBool("Move", true); Quaternion target = Quaternion.LookRotation(new Vector3(moveDir.x, 0, moveDir.z)); model.rotation = Quaternion.Slerp(model.rotation, target, turnSpeed * Time.deltaTime); } else animator.SetBool("Move", false); if (!characterController.isGrounded) moveDir.y -= gravity * Time.deltaTime; characterController.Move(moveDir * moveSpeed * Time.deltaTime); } public void OnMove(InputAction.CallbackContext context) { if (!isLocalPlayer) return; if (characterController.isGrounded) moveInput = context.ReadValue(); else moveInput = Vector2.zero; } public void OnJump(InputAction.CallbackContext context) { if (!isLocalPlayer) return; if (characterController.isGrounded) { moveDir.y = jumpSpeed; } } public void OnEsc(InputAction.CallbackContext context) { if (!isLocalPlayer) return; if(Cursor.lockState == CursorLockMode.Locked) Cursor.lockState = CursorLockMode.None; else Cursor.lockState = CursorLockMode.Locked; } }