Contrôleur FPS Unity

FPS (ou First-Person Shooter) est un jeu dans lequel le personnage principal est contrôlé à la première personne.

Les commandes habituelles sont W, A, S et D pour marcher, Mouse Look pour regarder autour de lui, Espace pour sauter et Left Shift pour sprinter, permettant au joueur de bouger librement dans le niveau.

Dans cet article, je vais montrer comment créer un contrôleur FPS en Unity qui gérera la rotation de la caméra et les mouvements du joueur.

Pas

Pour créer un contrôleur FPS, suivez les étapes ci-dessous:

  • Créez un nouvel objet de jeu (GameObject -> Create Empty) et nommez-le "FPSPlayer"
  • Créez une nouvelle capsule (GameObject -> Objet 3D -> Capsule) et déplacez-la à l'intérieur de l'objet "FPSPlayer"
  • Retirez le composant Capsule Collider de Capsule et changez sa position en (0, 1, 0).
  • Déplacez la caméra principale à l'intérieur de l'objet "FPSPlayer" et changez sa position en (0, 1,64, 0).

  • Créez un nouveau script, nommez-le "SC_FPSController" et collez-y le code ci-dessous:
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);
        }
    }
}
  • Attachez le script SC_FPSController à l'objet "FPSPlayer" (vous remarquerez qu'il a également ajouté un autre composant appelé Character Controller, changez sa valeur centrale en (0, 1, 0))
  • Attribuez la caméra principale à la variable Player Camera dans SC_FPSController

Contrôleur FPS Unity

Le contrôleur FPS est maintenant prêt !

Source
📁FPSController.unitypackage53.91 KB
Articles suggérés
Ajout de Crouching au lecteur FPS dans Unity
Tutoriel Player 3D et 2D Wall Jump pour Unity
Contrôleur de personnage Comment ajouter la possibilité de pousser des corps rigides dans Unity
Unity Comment créer des commandes tactiles mobiles
Contrôleur de lecteur planétaire basé sur Rigidbody pour Unity
Comment ajouter la prise en charge de la plate-forme mobile au contrôleur de personnage dans Unity
Créer le mouvement des joueurs dans Unity