Я сделал простой сценарий движения для 3D-игры в Unity. (Я использую простую капсулу для плеера). Он работает нормально, но с написанным мною кодом игрок может свободно перемещаться и в воздухе. Если я нажимаю W и поворачиваю мышь, игрок может легко повернуться на 180 градусов, а когда я прыгаю во время ходьбы и отпускаю клавишу W в воздухе, игрок полностью останавливается в воздухе, но это не так реалистично c. Я хочу иметь лишь небольшой контроль над игроком, находясь в воздухе, и хочу, чтобы он продолжал двигаться вперед после отпускания клавиши W в воздухе, чтобы он не останавливался мгновенно. Krunker.io - хороший пример движения, которого я пытаюсь добиться.
Это мой код.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement1 : MonoBehaviour
{
public float speed;
public float jumpForce;
public float raycastDistance;
private Rigidbody rb;
private void Start()
{
rb = GetComponent<Rigidbody>();
}
private void Update()
{
Jump();
}
private void FixedUpdate()
{
Move();
}
private void Move()
{
float hAxis = Input.GetAxisRaw("Horizontal");
float vAxis = Input.GetAxisRaw("Vertical");
Vector3 movement = new Vector3(hAxis, 0, vAxis) * speed;
Vector3 newPosition = rb.position + rb.transform.TransformDirection(movement);
rb.MovePosition(newPosition);
}
private void Jump()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (isGrounded())
{
rb.AddForce(0, jumpForce, 0, ForceMode.Impulse);
}
}
}
private bool isGrounded()
{
return Physics.Raycast(transform.position, Vector3.down, raycastDistance);
}
}