Реализация плавного 3D-движения от первого лица в Unity: методы и примеры кода

Вот несколько способов реализации сценария трехмерного движения от первого лица в игре, а также примеры кода с использованием Unity в качестве механизма разработки игр:

Метод 1: контроллер символов с вводом

using UnityEngine;
public class FPSMovement : MonoBehaviour
{
    public float speed = 5f;
    private CharacterController controller;
    void Start()
    {
        controller = GetComponent<CharacterController>();
    }
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 movement = transform.right * horizontal + transform.forward * vertical;
        controller.Move(movement * speed * Time.deltaTime);
    }
}

Метод 2: твердое тело с входными данными

using UnityEngine;
public class FPSMovement : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody rb;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.freezeRotation = true;
    }
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(horizontal, 0f, vertical);
        rb.velocity = movement * speed;
    }
}

Метод 3: твердое тело с силами

using UnityEngine;
public class FPSMovement : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody rb;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.freezeRotation = true;
    }
    void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(horizontal, 0f, vertical);
        rb.AddForce(movement * speed);
    }
}

Метод 4: контроллер символов с плавным вращением

using UnityEngine;
public class FPSMovement : MonoBehaviour
{
    public float speed = 5f;
    public float rotationSpeed = 10f;
    private CharacterController controller;
    void Start()
    {
        controller = GetComponent<CharacterController>();
    }
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 movement = transform.right * horizontal + transform.forward * vertical;
        controller.Move(movement * speed * Time.deltaTime);
        float mouseX = Input.GetAxis("Mouse X");
        transform.Rotate(Vector3.up * mouseX * rotationSpeed);
    }
}

Это всего лишь несколько примеров того, как можно реализовать сценарий 3D-движения FPS в Unity. В зависимости от ваших конкретных требований и настроек проекта вам может потребоваться изменить или объединить эти методы для достижения желаемых результатов.