Bienvenue sur ce premier tutoriel Unity3D. L'objectif du jour est de prendre en main cet outil pour développer vos jeux.
Avant toute chose il vous faudra quelques bases en POO (Programmation Orientée Objet). Si ce n'est pas déjà le cas je vous invite à lire quelques cours là dessus avant d'attaquer ce sera un plus indéniable.
Pour ce premier exercice nous allons concevoir un contrôleur basique qui permet de déplacer un cube en fonction des contrôles du joueur. Pour commencer, nous allons créer deux objets, un plan (GameObject->CreateOther->Plane) et un Cube (même menu). Positionnez le cube de sorte qu'il flotte légèrement au dessus du plan.
En cliquant sur le bouton play, la simulation commence. Mais rien ne se passe. C'est normal, nous allons maintenant créer un nouveau "component" et l'ajouter sur ce cube. Cliquez sur le cube et descendez en bas de l'inspecteur qui se situe sur la droite de votre écran. Cliquez sur "Add Component" > "New script", nommez le CubeController par exemple et sélectionnez de préférence le language CSharp.
Votre nouveau component est automatiquement ajouté à votre objet. Il est présenté par son nom et le type de component "(Script)" qui lui est associé. En double cliquant sur le champ "CubeController" Unity ouvrira automatiquement l'éditeur de code associé, par défaut MonoDevelop.
Vous arrivez dans un fichier de classe C# préconstruit dans lequel se trouvent 2 fonctions : Start et Update.
Start est la fonction appellée au démarrage du jeu, elle permet d'initialiser vos variables et faire des traitements préalables à l'exécution, tandis qu'Update sera exécuté à chaque boucle du jeu, environ 60 fois par seconde.
Puisque vous êtes familiarisé avec la POO vous remarquerez dans le début du fichier la déclaration de la classe
public class CubeController : MonoBehaviour
Ceci implique que notre nouveau script hérite de la classe MonoBehaviour, ce sera le cas pour la grande majorité de vos scripts sur Unity, un petit tour dans la documentation, vous détaillera toutes les autres variables et fonctions utiles accessibles depuis votre classe.
Pour l'instant nous allons nous contenter de la fonction update. Vous aurez probablement remarqué qu'en déplaçant votre objet dans la scène vous avez modifié les valeurs du component "transform" (tout en haut dans l'inspecteur) de votre cube. Et bien nous allons faire exactement la même chose mais depuis le code de notre nouveau component CubeController.
Mon premier MonoBehaviour
La classe MonoBehaviour dispose d'un accesseur direct au component transform, c'est très pratique, et en consultant la documentation du fameux component Transform nous apprenons qu'il est notament composé d'une variable "Position", de type Vector3 qui représente sa position dans l'espace. Essayons de modifier sa valeur en lui ajoutant, à chaque boucle (ou frame) un léger déplacement.
void Update () {
transform.position = transform.position + new Vector3(0.0f ,0.0f, 0.1f);
}
Cliquez sur le bouton play, et admirez votre cube se déplacer tout seul ! Concrètement, à chaque nouvelle image, le cube est position à sa position + un déplacement de 0,1 unité en Z. Vous pouvez modifier les valeurs de ce vecteur pour tester les autres directions. Mais vous pouvez aussi y brancher ... les contrôles du joueur !
Les inputs
Il existe de nombreuses façons de récupérer les entrées de l'utilisateur. Pour une première version nous allons nous contenter d'écouter les touches directionnelles avec la fonction Input.GetKey et d'interpréter ces touches pour déplacer notre cube.
void Update ()
{
// Création d'un nouveau vecteur de déplacement
Vector3 move = new Vector3();
// Récupération des touches haut et bas
if(Input.GetKey(KeyCode.UpArrow))
move.z += 0.1f;
if(Input.GetKey(KeyCode.DownArrow))
move.z -= 0.1f;
// Récupération des touches gauche et droite
if(Input.GetKey(KeyCode.LeftArrow))
move.x -= 0.1f;
if(Input.GetKey(KeyCode.RightArrow))
move.x += 0.1f;
// On applique le mouvement à l'objet
transform.position += move;
}
Lancez le jeu et déplacez votre objet avec les flèches directionelles. C'est magique !
Les variables
Maintenant que notre cube se déplace, nous aimerions peut-être pouvoir régler sa vitesse de déplacement plus simplement, nous allons alors créer une variable publique afin de pouvoir modifier sa valeur directement depuis l'inspecteur d'Unity :
public class CubeController : MonoBehaviour
{
// Déclaration de la variable de vitesse
public float m_speed = 0.1f;
void Update ()
{
// Création d'un nouveau vecteur de déplacement
Vector3 move = new Vector3();
// Récupération des touches haut et bas
if(Input.GetKey(KeyCode.UpArrow))
move.z += m_speed;
if(Input.GetKey(KeyCode.DownArrow))
move.z -= m_speed;
// Récupération des touches gauche et droite
if(Input.GetKey(KeyCode.LeftArrow))
move.x -= m_speed;
if(Input.GetKey(KeyCode.RightArrow))
move.x += m_speed;
// On applique le mouvement à l'objet
transform.position += move;
}
}
Vous avez désormais accès à cette variable directement dans la scène pour régler simplement la vitesse de déplacement de votre cube :
Voici les bases du déplacement, c'est aussi simple que celà. J'espère que ce premier tutoriel vous a permis de comprendre brièvement comment fonctionne l'intéraction entre les scripts et les objets dans Unity3d. Si vous souhaitez aller plus loin, laissez un commentaire et dites moi quelle est la prochaine étape que vous aimeriez atteindre. Ce cube pourrait être le début d'une grande aventure, devenir un personnage animé, un pétale de fleur ... ou pourquoi pas un véhicule qui franchit des montagnes et tire des feux d'artifices ! Laissez libre court à votre imagination !