3D FPS движение в Unity 5 - PullRequest
0 голосов
/ 03 мая 2020

Я сделал простой сценарий движения для 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);
    }
}
...