I. Introduction▲
Cette série explique pas à pas la création d'un jeu 2D dans lequel un vaisseau collecte des pépites d'or.
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.
II. Vidéo▲
Unity - UFO 2D - Contrôler le joueur
III. Résumé▲
Dans cette vidéo, vous allez apprendre à déplacer le joueur à l'aide du clavier.
III-A. Physique▲
Pour déplacer le joueur, nous allons utiliser la physique. Unity possède deux systèmes physiques, un pour la 2D et un pour la 3D. Ils peuvent être activés sur la même scène, toutefois, ils ne pourront interagir ensemble.
Dans ce projet, seul le système 2D est nécessaire. Pour l'utiliser, nous devons ajouter un « RigidBody 2D » au joueur grâce au menu « Component » → « Physics 2D » → « RigidBody 2D ».
III-B. Contrôle par le joueur▲
Nous souhaitons que le joueur puisse déplacer son vaisseau grâce au clavier. Suivant les touches utilisées, nous souhaitons appliquer telle ou telle force physique sur le vaisseau. Pour ce faire, nous devons ajouter un script dans lequel nous implémenterons ce comportement.
Le script est nommé « PlayerController ». Le langage utilisé est le C#. Voici son contenu :
using
UnityEngine;
using
System.
Collections;
public
class
CompletePlayerController :
MonoBehaviour {
public
float
speed;
// variable pour stocker la vitesse de mouvement du joueur.
private
Rigidbody2D rb2d;
// stocke une référence vers le composant Rigidbody2D nécessaire pour utiliser la physique 2D.
// Initialisation
void
Start
(
)
{
// Récupère et conserve la référence vers le composant Rigidbody2D afin de pouvoir y accéder plus tard.
rb2d =
GetComponent<
Rigidbody2D>
(
);
}
// La fonction FixedUpdate() est appelée à intervalle régulier et est indépendante du nombre d'images par seconde. Placez votre code physique ici.
void
FixedUpdate
(
)
{
// Stocke l'entrée horizontale dans la variable moveHorizontal.
float
moveHorizontal =
Input.
GetAxis (
"Horizontal"
);
// Stocke l'entrée verticale dans la variable moveVertical.
float
moveVertical =
Input.
GetAxis (
"Vertical"
);
// Utilise les deux nombres pour créer un Vector2.
Vector2 movement =
new
Vector2 (
moveHorizontal,
moveVertical);
// Appelle la fonction AddForce() du Rigidbody2D rb2d avec le mouvement multiplié par la vitesse.
rb2d.
AddForce (
movement *
speed);
}
}
Deux fonctions existent pour effectuer des actions à chaque mise à jour de l'état du jeu :
- Update() ;
- FixedUpdate().
La fonction Update() est appelée avant l'affichage du jeu. La fonction FixedUpdate() est appelée juste avant tout calcul physique. C'est dans cette seconde fonction que nous devons placer notre code interagissant avec la physique.
Pour obtenir les touches appuyées par le joueur, nous utilisons la fonction Input.GetAxis().
Pour appliquer une force physique sur le joueur, nous utilisons la fonction Rigidbody2D.AddForce().
En définissant une variable « speed » publique, celle-ci peut être définie à travers l'éditeur. Ainsi, il est facile de modifier la vitesse du joueur.
III-C. Amélioration▲
Si vous testez immédiatement, le vaisseau va tomber. Cela n'est pas logique pour un jeu 2D, vue de dessus. Pour enlever ce comportement, définissez la propriété « Gravity Scale » du « Rigidbody2 » à 0.
IV. Ressources▲
Vous pouvez télécharger les ressources pour ce projet sur l'Asset Store de Unity.
V. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.