Вот несколько способов реализации сценария трехмерного движения от первого лица в игре, а также примеры кода с использованием 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. В зависимости от ваших конкретных требований и настроек проекта вам может потребоваться изменить или объединить эти методы для достижения желаемых результатов.