Créer un jeu avec Unity 3D

Interaction avec l'utilisateur

ToutApprendre

- Titre : Créer un jeu avec Unity 3D

- Auteur : ToutApprendre

- Parution : 10 octobre 2014

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Équipe rubrique 2D/3D/Jeux. 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.

Sommaire

- Navigation

- I. Vidéo

- II. Ce qu'il faut retenir

- II-A. Interagir avec l'utilisateur

- II-A-1. Avec le clavier

- II-A-2. Avec la souris

- II-B. Fluidité d'un jeu vidéo

- III. Commenter

- IV. Remerciements

- Navigation

Navigation

Tutoriel précédent : Accéder à un composant

Sommaire

Tutoriel suivant : Accéder aux GameObjects

I - Vidéo

Animation en format "youtube" non supportée.
Contenu uniquement consultable en ligne à cette adresse :
https://www.youtube.com/watch?v=MAeZfaiS1sw

II - Ce qu'il faut retenir

II-A - Interagir avec l'utilisateur

Pour ce chapitre, la classe qui nous intéressera est la classe Input.

II-A-1 - Avec le clavier

Pour vérifier si l'utilisateur a appuyé sur la flèche de gauche du clavier, vous pouvez utiliser le code suivant :

function Update() {
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
Debug.Log("Test");
}
}

La liste des touches testables se trouve ici.

De la même manière, pour déplacer le cube suivant les actions de l'utilisateur, nous ferons ainsi :

private var vitess:float;

function Start() {
vitesse = 0.2;
}

function Update() {
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
this.transform.Translate(Vector3(-vitesse, 0, 0));
}
}

Finalement, il suffit d'écrire :

private var vitess:float;

function Start() {
vitesse = 0.2;
}

function Update() {
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
this.transform.Translate(Vector3(-vitesse, 0, 0));
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
this.transform.Translate(Vector3(vitesse, 0, 0));
}
else if (Input.GetKeyDown(KeyCode.UpArrow))
{
this.transform.Translate(Vector3(0, 0, vitesse));
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
this.transform.Translate(Vector3(0, 0, -vitesse));
}
}

pour déplacer le cube dans toutes les directions.

II-A-2 - Avec la souris

De manière similaire à l'utilisation du clavier, vous pouvez utiliser la fonction GetMouseButtonDown() de la classe Input pour savoir si le joueur presse un des boutons de la souris :

function Update() {
if (Input.GetMouseButtonDown(0))
{
Debug.Log("Clic souris");
}
}

Voici la correspondance des boutons principaux :

Clic gauche

0

Clic droit

1

Clic sur la molette

2

Vous pouvez accéder aux autres boutons de la souris avec des nombres supérieurs à 2, mais notez bien que ces boutons n'existent pas sur toutes les souris.

II-B - Fluidité d'un jeu vidéo

Il est très important qu'un jeu vidéo soit fluide et ce, sur n'importe quelle machine (puissante ou non).

Le code vu ci-dessus est dépendant du nombre d'affichages de la scène. En effet, sur un PC puissant, la scène s'affichera 60 fois par seconde. Le cube pourra donc être déplacé de 60 * 0,2 = 12 unités chaque seconde. Toutefois, sur un PC moins puissant, le jeu ne sera affiché que 30 fois par seconde. Le cube ne pourra alors être déplacé que de 30 * 0,2 = 6 unités par seconde. Une telle différence peut être catastrophique pour le gameplay et il faut donc trouver une méthode qui, indépendamment du nombre d'images par seconde et donc du PC, met à jour le jeu de façon identique.

Pour ce faire, nous utiliserons Time.deltaTime. Unity 3D inscrit dans cette variable le temps écoulé entre deux images. Ainsi, ce temps sera de 1/60 sur une machine puissante et de 1/30 sur une machine plus faible. En multipliant simplement ce temps avec notre vitesse nous pouvons obtenir une valeur fixe et ce, quelle que soit la machine. Voyez ceci avec le calcul précédent :

- pour la machine puissante : 60 * 0,2 *1/60 = 0.2

- pour la machine faible : 30 * 0.2 *1/30 = 0.2

Ce qui est parfait, car nous obtenons toujours le même déplacement, peu importe le nombre d'images par seconde de notre jeu.

Nous obtenons ainsi le code suivant :

private var vitess:float;

function Start() {
vitesse = 0.2;
}

function Update() {
var vitesseIndependante = Time.deltaTime * vitesse;

if (Input.GetKeyDown(KeyCode.LeftArrow))
{
this.transform.Translate(Vector3(-vitesseIndependante, 0, 0));
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
this.transform.Translate(Vector3(vitesseIndependante, 0, 0));
}
else if (Input.GetKeyDown(KeyCode.UpArrow))
{
this.transform.Translate(Vector3(0, 0, vitesseIndependante));
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
this.transform.Translate(Vector3(0, 0, -vitesseIndependante));
}
}

III - Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum, ou encore, poser vos questions dans le forum Unity.

IV - Remerciements

Nous remercions « ToutApprendre » pour l'élaboration et la réalisation de ces vidéos. Vous pouvez retrouver sa chaîne YouTube en suivant ce lien.

Navigation

Tutoriel précédent : Accéder à un composant

Sommaire

Tutoriel suivant : Accéder aux GameObjects