Controlador Unity FPS

FPS (o First-Person Shooter) es un juego en el que el personaje principal se controla desde una perspectiva en primera persona.

Los controles habituales son W, A, S y D para caminar, Mouse Look para mirar alrededor, Espacio para saltar y Mayús izquierda para correr, lo que permite al jugador moverse libremente por el nivel.

En esta publicación, mostraré cómo hacer un controlador FPS en Unity que manejará la rotación de la cámara y el movimiento del jugador.

Pasos

Para hacer un controlador FPS, siga los pasos a continuación:

  • Crea un nuevo objeto de juego (GameObject -> Crear vacío) y asígnale un nombre "FPSPlayer"
  • Crea una nueva Cápsula (GameObject -> Objeto 3D -> Cápsula) y muévela dentro del Objeto "FPSPlayer"
  • Retire el componente Capsule Collider de Capsule y cambie su posición a (0, 1, 0)
  • Mueva la cámara principal dentro del objeto "FPSPlayer" y cambie su posición a (0, 1.64, 0)

  • Crea un nuevo script, asígnale el nombre "SC_FPSController" y pega el siguiente código dentro de él:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]

public class SC_FPSController : MonoBehaviour
{
    public float walkingSpeed = 7.5f;
    public float runningSpeed = 11.5f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    public Camera playerCamera;
    public float lookSpeed = 2.0f;
    public float lookXLimit = 45.0f;

    CharacterController characterController;
    Vector3 moveDirection = Vector3.zero;
    float rotationX = 0;

    [HideInInspector]
    public bool canMove = true;

    void Start()
    {
        characterController = GetComponent<CharacterController>();

        // Lock cursor
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void Update()
    {
        // We are grounded, so recalculate move direction based on axes
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        Vector3 right = transform.TransformDirection(Vector3.right);
        // Press Left Shift to run
        bool isRunning = Input.GetKey(KeyCode.LeftShift);
        float curSpeedX = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Vertical") : 0;
        float curSpeedY = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Horizontal") : 0;
        float movementDirectionY = moveDirection.y;
        moveDirection = (forward * curSpeedX) + (right * curSpeedY);

        if (Input.GetButton("Jump") && canMove && characterController.isGrounded)
        {
            moveDirection.y = jumpSpeed;
        }
        else
        {
            moveDirection.y = movementDirectionY;
        }

        // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below
        // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied
        // as an acceleration (ms^-2)
        if (!characterController.isGrounded)
        {
            moveDirection.y -= gravity * Time.deltaTime;
        }

        // Move the controller
        characterController.Move(moveDirection * Time.deltaTime);

        // Player and Camera rotation
        if (canMove)
        {
            rotationX += -Input.GetAxis("Mouse Y") * lookSpeed;
            rotationX = Mathf.Clamp(rotationX, -lookXLimit, lookXLimit);
            playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
            transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * lookSpeed, 0);
        }
    }
}
  • Adjunte el script SC_FPSController al objeto "FPSPlayer" (notará que también agregó otro componente llamado Controlador de caracteres, cambie su valor central a (0, 1, 0))
  • Asigne la cámara principal a la variable Cámara del reproductor en SC_FPSController

Controlador Unity FPS

¡El controlador FPS ya está listo!

Fuente
📁FPSController.unitypackage53.91 KB
Artículos sugeridos
Agregar agacharse al reproductor FPS en Unity
Tutorial de salto de pared 3D y 2D de Player para Unity
Controlador de personajes Cómo agregar la capacidad de empujar cuerpos rígidos en Unity
Unity Cómo hacer controles táctiles móviles
Creando movimiento de jugadores en unidad
Cómo agregar soporte de plataforma móvil al controlador de personajes en Unity
Controlador de jugador planetario basado en cuerpo rígido para Unity