Unity - UFO 2D

Contrôler le joueur

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

 
Sélectionnez
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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2016 Unity Technologies. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.