Space Shooter Unity3D & C#

Dans ce tutoriel nous allons développer un petit space shooter dans lequel le joueur contrôlera un vaisseau spatial capable de tirer des missiles pour détruire les météorites / astéroïdes qui s'approchent.

Jeu de space shooter
Exemple de Space Shooter

Introduction et prérequis

Le jeu sera bien sûr développé en C# sous Unity3D. Nous n'allons pas avoir besoin de beaucoup de ressources. Afin d'avoir quelques textures, quelques sons et modèles 3D, je vous invite à télécharger les ressources se trouvant dans ce package gratuit : https://www.assetstore.unity3d.com/en/#!/content/13866.

Mon projet est organisé de la façon suivante :

Jeu de space shooter
Projet Space Shooter

Ne vous inquiétez pas si vous n'avez pas exactement la même configuration que moi, quoi qu'il arrive, nous allons développer nos propres scripts ensemble et nous allons créer nos propres prefabs. J'ai d'ailleurs supprimé quasiment tous les éléments du package sauf les sons, les textures et les modèles 3D que nous allons utiliser.
Voilà exactement ce que j'ai conservé pour ce tutoriel :
Assets space shooter
Ressources Space Shooter

Pour les explications, voilà ce que nous allons faire :

  • Un plane 3D + texture animée pour l'arrière-plan
  • Un générateur d'astéroïdes
  • Un vaisseau qui bouge avec la souris
  • Des missiles pour exploser les astéroïdes
  • Détection des collisions
C'est parti !

Création du background

Nous allons commencer par créer un arrière-plan animé. Cette étape sera très simple. Commencez par créer un plane (GameObject / 3D Object / Plane). Positionnez ce Plane en "0,0,0" et modifiez sa taille afin de l'agrandir et de l'étirer. Ajoutez une texture d'espace sur la plane. Vous pouvez utiliser une texture du package téléchargé ou n'importe quelle texture trouvée sur le net (attention aux droits tout de même). Voilà à quoi cela ressemble :

background space shooter
Arrière-plan du jeu
Comme d'habitude vous êtes libre de faire comme bon vous semble, vous pouvez même mettre uniquement une couleur unie comme un simple fond noir.

Pour animer la texture de notre plane, nous allons développer en petit script. En fait, le plane ne sera jamais en mouvement, nous allons juste faire bouger la texture afin de créer une illusion de mouvement. Le script est très simple, nous n'utiliserons que la méthode "SetTextureOffset" pour l'animation.
Créez un script que vous allez appeler "Scroll" et ouvrez le.
Créez une variable "scrollSpeed" pour la vitesse de mouvement.
Voilà comment utiliser la fonction SetTextureOffset :
Bien sûr cette fonction ne marche que si une texture est attachée à votre plane. Cela est intéressant car nous avons une illusion de mouvement. Placez le script sur votre plane et testez votre scène pour constater son bon fonctionnement.

Création des astéroïdes

Nous allons maintenant créer les prefabs des astéroïdes que nous allons faire apparaître dans la scène.
Pour créer vos propres prefabs comme moi, vous pouvez suivre la procédure suivante pour créer un astéroïde :

  • Faites glisser le modèle 3D de l'astéroïde dans la scène (Exemple : prop_asteroid_01)
  • Ajoutez la texture associée (Exemple : prop_asteroid_01_dff)
  • Ajoutez un rigidbody et décochez "Use Gravity" (Add component / Physics / Rigidbody)
  • Ajoutez un Sphere Collider (Add component / Physics / Sphere Collider)
  • Ajoutez un audio Source (Add component / Audio / Audio Source)
  • Faites glisser votre astéroïde dans votre projet pour créer un prefab
Vous pouvez répéter cette opération 3 fois pour les 3 astéroïdes mais ça fonctionne aussi avec un seul astéroïde. Voilà la configuration détaillée de l'un de mes astéroïdes :
Astéroide
Configuration Astéroïde
Comme vous pouvez le voir, mon astéroïde possède un script. Ce script permet d'animer mon astéroïde (Rotation) afin de rendre le jeu plus vivant et il gère également la collision avec les missiles. Le script fait exploser l'astéroïde si un missile le touche.

Pour ce script (Appelé "Asteroid") vous aurez besoin de quelques variables : Dans la fonction Start, nous allons utiliser la méthode "Random.Range" pour générer des nombres aléatoires pour la vitesse de rotation de l'astéroïde. Dans cette fonction Start nous allons également utiliser "AddForce" pour propulser l'astéroïde dans la direction du joueur : Vous devez absolument inclure "UI" tout en haut de votre script en écrivant : using UnityEngine.UI;
Cela va nous permettre de gérer le texte.
La fonction Update sera très simple, on applique juste la rotation avec la fonction "Rotate" : Enfin, nous allons utiliser la fonction "OnTriggerEnter" pour détecter les collisions. Si un missile touche l'astéroïde, il faut augmenter le score, jouer le son, jouer l'explosion et faire disparaître l'astéroïde. Voilà comment faire cela : C'est tout pour ce script ! Placez-le sur les prefabs de vos astéroïdes.
Si vous voulez qu'il fonctionne, vous devez créer un nouveau texte en cliquant sur "GameObject / UI / Text". Vous pouvez modifier les options du texte (taille, couleur, position, police) afin de le customiser comme vous le souhaitez :

Texte
UI Text
Pensez à configurer votre script en spécifiant les variables de son et de particules. J'ai utilisé une particule d'explosion du package "Assets / Import Package / ParticleSystems". Voilà comment est configuré mon script :
Script astéroïde
Script astéroïde

Générer des astéroïdes à l'infini

Nous allons maintenant voir comment faire apparaître des astéroïdes à l'infini. Nous allons créer 3 objets vide (GameObject / Create Empty) que nous allons placer à 3 endroits différents :

créer astéroïde
Zones de création
Les astéroïdes seront créés sur ces zones aléatoirement. Placez ces objets légèrement au-dessus du background, par exemple en 1 sur l'axe des Y.
Créez un script "Generate" et ouvrez le. Ce script sera placé sur la caméra principale et fera apparaître les astéroïdes sur les zones.
Nous avons besoin de 3 variables : Les explications de ces variables sont données dans les commentaires dans le code ci-dessus.
Nous allons créer une fonction qui va générer un astéroïde sur une zone grâce à "Instantiate" : Ensuite nous pouvons passer à la fonction Update qui appellera la fonction "GenerateAsteroid" que nous venons de créer : Ajoutez ce script à votre caméra et attribuez les valeurs aux variables :
créer astéroïde
Script de génération
J'ai fait glisser / déposer les prefabs des astéroïdes et les GameObjects des zones dans les variables du script. Mes astéroïdes sont maintenant générés à l'infini !

Création du joueur

Nous allons créer le vaisseau spatial du joueur. Comme pour les astéroïdes, vous devez :

  • Ajouter le modèle 3D
  • Ajouter la texture du vaisseau
  • Ajouter un box collider
  • Ajouter un Audio script
Voilà mon vaisseau :
créer vaisseau
Vaisseau
Et voilà ma configuration dans l'inspector :
créer vaisseau
Configuration du vaisseau
Vous pouvez placer le vaisseau sur la scène, en le positionnant par exemple en "0,1,-7" (changez les valeurs si vous avez mieux dans votre projet). A l'heure actuelle, ma scène ressemble à cela :
scene space shooter unity
Scène space shooter
Nous allons passer à la programmation des contrôles du vaisseau. Créez un script "Player" et ouvrez-le. Ce script contient les 5 variables suivantes : Nous allons utiliser "Input.GetAxis" pour détecter les mouvements de la souris. Si la souris bouge vers la gauche, le vaisseau se décale à gauche, si la souris va à droite, le vaisseau aussi. Cela se passe dans la fonction Update : Toujours dans la fonction Update, nous allons gérer le clic de la souris. Si on clique, on envoie un missile vers l'avant : Vous pouvez également créer une fonction OnCollisionEnter pour détecter si le vaisseau touche un astéroïde et si tel est le cas, le vaisseau explose : Le script est terminé, vous pouvez le placer sur le vaisseau du joueur.

Il nous reste une dernière chose à faire avant de terminer : créer le missile !
Alors le missile est très simple, il s'agit d'un plane avec une texture, un collider et un rigidbody sans gravity :

missile space shooter unity
Missile prefab
Voilà les paramètres dans l'inspector :
missile space shooter unity
Missile paramètres
Créez un prefab de votre missile. Vous pouvez maintenant configurer le script Player et remplir les variables de la façon suivante :
script vaisseau
Script Player
La variable shoot contient le prefab du missile. Maintenant que tout est configuré, le jeu est terminé, vous pouvez le tester !

Améliorations

Le projet peut être amélioré de plusieurs façons. Vous pouvez ajouter des ennemis qui bougent, ajouter un système d'amélioration du vaisseau et de boutique (par exemple améliorer vos missiles, résistance, vitesse etc.).


Résultat final

Vous pouvez tester le résultat final en cliquant sur le lien ci-dessous :

TESTER LA DEMO

Télécharger les sources et le projet

Seuls les membres premium peuvent télécharger les fichiers sources et le projet du tutoriel.

Devenez membre premium !