Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В игре в юнити 3д.как пофиксить баг и

Firo Ro Ходченков Ученик (98), на голосовании 1 месяц назад
как пофиксить баг если когда я прыгаю и влетаю в вертикальный объект,и зажимаю w,то я зависаю в воздухе соприкасаясь с вертикальным объектом.А мне надо чтобы он упал вниз.на w я иду вперёд.И так же будет если я как либо буду двигатся в объект тоесть в его коллайдер.вот скрипт игрока using UnityEngine;

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;
}
}
Голосование за лучший ответ
Tim Timoshin Tim Знаток (467) 2 месяца назад
Ну как минимум не использовать чат гпт для кода, он ООП не знает, по этому код нормально не напишет
Похожие вопросы