В общем решил на днях сделать простенький шутер и столкнулся с проблемой: вобщем когда подключил анимации камера начала вести себя как шл.... она начала вращаться только вверх и вниз,а при повороте мыши влево или вправо камера не реагирует. раза 3 переписал код и не могу понять в чем ошибка. код ниже
using UnityEngine;
public class FPSController : MonoBehaviour
{
[Header("Camera Settings")]
[SerializeField] private float mouseSensitivity = 100f;
[SerializeField] private float minVerticalAngle = -90f;
[SerializeField] private float maxVerticalAngle = 90f;
[SerializeField] private Transform playerCamera;
[Header("Movement Settings")]
[SerializeField] private float moveSpeed = 5f;
[SerializeField] private float jumpForce = 5f;
[SerializeField] private Transform groundCheck;
[SerializeField] private LayerMask groundMask;
[SerializeField] private float groundDistance = 0.4f;
private Rigidbody rb;
private float xRotation = 0f;
private bool isGrounded;
private Vector3 currentVelocity;
private void Awake()
{
rb = GetComponent<Rigidbody>();
Cursor.lockState = CursorLockMode.Locked;
if (playerCamera == null && Camera.main != null)
{
playerCamera = Camera.main.transform;
playerCamera.SetParent(transform);
}
}
private void Update()
{
HandleCameraRotation();
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
private void FixedUpdate()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
HandleMovement();
}
private void HandleCameraRotation()
{
if (playerCamera == null) return;
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, minVerticalAngle, maxVerticalAngle);
playerCamera.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
transform.Rotate(Vector3.up * mouseX);
}
private void HandleMovement()
{
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
currentVelocity = new Vector3(move.x * moveSpeed, rb.linearVelocity.y, move.z * moveSpeed);
rb.linearVelocity = currentVelocity; // Используем modern linearVelocity вместо velocity
}
private void OnDrawGizmosSelected()
{
if (groundCheck != null)
{
Gizmos.color = isGrounded ? Color.green : Color.red ;
Gizmos.DrawWireSphere(groundCheck.position, groundDistance);
}
}
}