как пофиксить баг если когда я прыгаю и влетаю в вертикальный объект,и зажимаю w,то я зависаю в воздухе соприкасаясь с вертикальным объектом.А мне надо чтобы он упал вниз.на w я иду вперёд.И так же будет если я как либо буду двигатся в объект тоесть в его коллайдер.вот скрипт игрока using UnityEngine;
public class PlayerMovement : MonoBehaviour { public float moveSpeed = 5f; public float jumpForce = 7f; public float mouseSensitivity = 2f;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 7f;
public float mouseSensitivity = 2f;
private Rigidbody rb;
private bool isGrounded;
private float rotationX = 0f;
public Transform cameraTransform;
void Start()
{
rb = GetComponent<Rigidbody>();
Cursor.lockState = CursorLockMode.Locked;
// Заблокировать вращение тела
rb.constraints = RigidbodyConstraints.FreezeRotation;
}
void Update()
{
// Управление движением
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");
Vector3 move = transform.right * moveX + transform.forward * moveZ;
rb.velocity = new Vector3(move.x * moveSpeed, rb.velocity.y, move.z * moveSpeed);
// Поворот камеры
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(0, mouseX, 0);
rotationX -= mouseY;
rotationX = Mathf.Clamp(rotationX, -90f, 90f);
cameraTransform.localRotation = Quaternion.Euler(rotationX, 0f, 0f);
// Прыжок
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
void FixedUpdate()
{
// Добавляем вниз силу для предотвращения зависания
if (!isGrounded)
{
rb.AddForce(Vector3.down * 10f, ForceMode.Acceleration);
}
}
void OnCollisionStay(Collision collision)
{
isGrounded = false; // По умолчанию считаем, что игрок не на земле
foreach (ContactPoint contact in collision.contacts)
{
if (contact.normal.y > 0.7f) // Проверка, соприкасается ли игрок с поверхностью снизу
{
isGrounded = true;
}
else
{
// Если игрок сталкивается с боковой поверхностью, добавляем скольжение вниз
Vector3 slideDirection = new Vector3(contact.normal.x, -Mathf.Abs(contact.normal.y), contact.normal.z);
rb.AddForce(slideDirection * 5f, ForceMode.Force);
}
}
}
void OnCollisionExit(Collision collision)
{
isGrounded = false;
}
}