Dans ce tutoriel pour Unity (en français !), nous allons d’abord apprendre à créer un simple First Person Controller. C’est effectivement la base pour tout jeu FPS. Ainsi, le joueur pourra se déplacer dans une scène en 3D. Il sera capable de marcher, courir, sauter, monter et descendre une pente, il pourra également regarder autour de lui, comme s’il tournait la tête.
- Pour commencer, créer un nouveau projet 3D.
- Créez un 3D Object de type Terrain.
Position : x=-250 ; y=0 ; z=-250 - Ensuite, Créez un 3D Object de type Capsule.
- Renommez le en « Player ».
Position : x=0 ; y=3 ; z=0 - Puis, déplacez Main Camera dans Player.
Configurez la position de la caméra ainsi : x = 0 ; y = 1.8; z = 0 - Sur Player : ajoutez le composant Character Controller.
- Enfin, ajoutez le script ci-dessous.
Le script : PlayerFPS
Le script PlayerFPS permet à votre personnage de faire les mouvements de base, de plus, la gravité est simulée afin que le joueur retombe toujours au sol, lorsqu’il effectue un saut par exemple.
(N’oubliez pas d’assigner Main Camera à playerCamera)
using UnityEngine;
public class PlayerFPS : MonoBehaviour
{
//Camera
public Camera playerCamera;
//Composant qui permet de faire bouger le joueur
CharacterController characterController;
//Vitesse de marche
public float walkingSpeed = 7.5f;
//Vitesse de course
public float runningSpeed = 15f;
//Vitesse de saut
public float jumpSpeed = 8f;
//Gravité
float gravity = 20f;
//Déplacement
Vector3 moveDirection;
//Marche ou court ?
private bool isRunning = false;
//Rotation de la caméra
float rotationX = 0;
public float rotationSpeed = 2.0f;
public float rotationXLimit = 45.0f;
// Start is called before the first frame update
void Start()
{
//Cache le curseur de la souris
Cursor.visible = false;
characterController = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
//Calcule les directions
//forward = avant/arrière
//right = droite/gauche
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 right = transform.TransformDirection(Vector3.right);
//Est-ce qu'on appuie sur un bouton de direction ?
// Z = axe arrière/avant
float speedZ = Input.GetAxis("Vertical");
// X = axe gauche/droite
float speedX = Input.GetAxis("Horizontal");
// Y = axe haut/bas
float speedY = moveDirection.y;
//Est-ce qu'on appuie sur le bouton pour courir (ici : Shift Gauche) ?
if (Input.GetKey(KeyCode.LeftShift))
{
//En train de courir
isRunning = true;
}
else
{
//En train de marcher
isRunning = false;
}
// Est-ce que l'on court ?
if (isRunning)
{
//Multiplie la vitesse par la vitesse de course
speedX = speedX * runningSpeed;
speedZ = speedZ * runningSpeed;
}
else
{
//Multiplie la vitesse par la vitesse de marche
speedX = speedX * walkingSpeed;
speedZ = speedZ * walkingSpeed;
}
//Calcul du mouvement
//forward = axe arrière/avant
//right = axe gauche/droite
moveDirection = forward * speedZ + right * speedX;
// Est-ce qu'on appuie sur le bouton de saut (ici : Espace)
if (Input.GetButton("Jump") && characterController.isGrounded)
{
moveDirection.y = jumpSpeed;
}
else
{
moveDirection.y = speedY;
}
//Si le joueur ne touche pas le sol
if (!characterController.isGrounded)
{
//Applique la gravité * deltaTime
//Time.deltaTime = Temps écoulé depuis la dernière frame
moveDirection.y -= gravity * Time.deltaTime;
}
//Applique le mouvement
characterController.Move(moveDirection * Time.deltaTime);
//Rotation de la caméra
//Input.GetAxis("Mouse Y") = mouvement de la souris haut/bas
//On est en 3D donc applique ("Mouse Y") sur l'axe de rotation X
rotationX += -Input.GetAxis("Mouse Y") * rotationSpeed;
//La rotation haut/bas de la caméra est comprise entre -45 et 45
//Mathf.Clamp permet de limiter une valeur
//On limite rotationX, entre -rotationXLimit et rotationXLimit (-45 et 45)
rotationX = Mathf.Clamp(rotationX, -rotationXLimit, rotationXLimit);
//Applique la rotation haut/bas sur la caméra
playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
//Input.GetAxis("Mouse X") = mouvement de la souris gauche/droite
//Applique la rotation gauche/droite sur le Player
transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * rotationSpeed, 0);
}
}
Les commandes
Pour contrôler le joueur, il faut utiliser les touches du clavier :
- Pour avancer et reculer = flèches haut/bas
- Effectuer les déplacements latéraux à gauche et à droite = Flèche de gauche/droite
- Sauter = espace
- Pour courir, maintenez Shift
Ensuite, la souris permet au joueur de regarder autour de lui, (haut/bas) et de changer de direction (droite/gauche).
Comme vous l’avez sans doute remarqué, le joueur ne peut pas encore tirer, c’est en effet, le sujet d’un autre tutoriel : Créer un FPS. Partie 2. Ajoutons le gun !
Unity Site officiel : https://unity.com/fr


Merci pour ce video
bonjour le script ne fonctionne pas quand je le met dans visual studio il ne se passe rien la page de script ne s ouvre pas merci
Bonjour.
Je ne comprends pas. Tu as créé le script ?
Bonjour le script fonctionne la capsule se deplace bien mais la vu elle ne bouge pas quand je deplace la souris. J’ai deja regarder le script il est aux complet et je ne comprent pas pourquoi sa ne fonctionne pas merci.
Bonjour.
Je pense que la caméra n’est pas placée au bon endroit.
Il faut mettre Main Camera dans Player.
Le script ne marche pas, Unity détecte des erreurs
Quelles sont les erreurs ?
Il ne faut pas oublier en haut du script:
using UnityEngine;
Bonjour merci pour le tuto qui fonctionne bien seulement comment faire car le pointeur de la souris reste toujours là et quand je met ma pause menu la rotation de la caméra continue, merci pour toutes réponse.
Bonjour, le système des flèche ne marche pas, la sourie oui. Pouvez vous m’aider?
Bonjour,
avez-vous bien ajouté ce composant ? https://youtu.be/9QNWCRfbyxU?t=125
Ne pas oublier de mettre le clavier en QWERTY pour les touches WASD.
Sinon vous devez utiliser les flèches.
Bonjour,
Script parfaitement fonctionnel.
Un grand merci à vous.
Juste une suggestion, est il possible de faire glisser le personnage sur une pente ? J’ai une plateforme qui tourne et, quand le joueur est dessus, il reste statique jusqu’à ce qu’elle soit à 90 degrés, ou la il tombe.
<merci d'avance
Bonjour,
désolé pour le délai.
J’ai trouvé ça par rapport à votre question:
https://answers.unity.com/questions/1358491/character-controller-slide-down-slope.html
c trop bizarre quand je copie colle le script non seulement il ne marche Mais en plus tout les e accent (é) sont entour en jaune et un message me met quand je clique dessus the caractère U00+e9 (é) n est un jsp quoi de language of ascii
bref du coup j’ai chnage tout les é en U00+e9pour voir et toujours rien voila je suis bien emebter si tu aurais une solution ce serait cool
Est-ce qu’il y a une erreur dans la console Unity ?
Les accents sont dans le commentaires du script, cela ne pose aucun problème.