TP1 - Ensiie

Download Report

Transcript TP1 - Ensiie

Game Programming Foundations
& Game Engine Architecture
TP1 Unity 3D : Shoot‘m up 1.0
Objectif :
Le but de ce TP est de commencer à réaliser un jeu de tir 2D1. Il permet de prendre en main
l’interface et de manipuler les concepts inhérents à Unity, notamment à travers des scripts
et à l’aide de la documentation. Il illustre les concepts théoriques vus en cours sur les
moteurs de jeu et le développement.
Pré-requis :
Début du Cours JIN 2014-2015 "Game Programming Foundations & Game Engine
Architecture"
Cours RV 2013-2014 "Unity"
TP1 associé "Introduction à Unity"
1. Ressources
Logiciel : http://unity3d.com/unity/
Documentation et tutoriels :
http://unity3d.com/support/documentation/ (en particulier Reference Manual, User Manual
et Scripting Reference)
http://unity3d.com/support/resources/
2. Construction des éléments du projet
Concepts/Classes/méthodes utilisés : Editor, Assets, Project, Hierarchy,
Inspector, GameObject, Component, Sprite, Transform, Collider/Rigidbody, Prefab
-
-
-
1
Créer un nouveau projet (= dossier) (sans charger aucun package prédéfini, avec réglages
2D)
Dans la fenêtre Projet, créer les dossiers “Prefabs”, “Scenes”, “Scripts”, "Sounds" et
“Textures”.
Dans la scène, ajouter 7 gameobjects vides de façon à avoir la hiérarchie ci-dessous.
Enregistrer la scène (= .unity)
Télécharger et copier toutes les images de
http://www.ensiie.fr/~guillaume.bouyer/JIN/TP1.zip
dans le dossier Textures
Insérer le Background dans la scène pour créer un Sprite
o Renommer en Background1
o Positionner dans le level 0
Dupliquer en un Background2 décalé de 20 en X
Sélectionner le sprite Platforms : il en contient en fait 2
o Modifier le mode du sprite en Multiple et lancer le sprite
editor
o Détourer les 2 sprites en les nommant platform1 et 2
o Insérer les sprites obtenus dans le level 1
Adapté d’un tutoriel original de http://pixelnest.io/
-
-
-
Créer 2 préfabs à partir de ces plateformes
Pour bien distinguer les plans, modifier la profondeur des 3 levels resp. à 10, 5 et 0
o Passer en vue 3D et visualiser
o Noter que la caméra en automatiquement en mode orthographique pour les projets
2D
Insérer le Player dans le level 2
o Modifier l’échelle en 0.2 0.2 1
o Ajouter un composant Box Collider 2D et modifier sa taille en 10 10
o Créer un préfab
Faire de même pour l’ennemi Poulpi
3. Animation : déplacement 2D d’objets
+ Script, MonoBehaviour, Start, Update, Transform, Time, Debug, Random, Vector2
-
-
Créer un nouveau script MoveScript.cs et l’ajouter comme composant du prefab Poulpi
o Assets -> Create -> C# Script
o L’éditer (par défaut avec Mono)
o Dans la fonction Start(), positionner l’objet à une hauteur aléatoire
o Définir 2 vecteurs 2d publics (vous remarquerez l’apparition de ces variables dans
l’inspector)
speed
direction
o Dans la fonction Update(), translater l’objet en fonction de ces vecteurs
Tester
Ajouter la prise en compte du Frame Delta
Ajouter l’affichage dans la console du Frame Rate
4. Interaction : contrôle 2D du joueur par le clavier
+ Input, Project Settings
-
Créer un script PlayerScript.cs et l’ajouter au prefab Player pour
o Diriger le vaisseau dans le plan avec les 4 flèches du clavier (plusieurs méthodes
possibles)
5. Gestion d’un projectile et de ses effets
+ Collider, Destroy, OnTriggerEnter
-
Créer un sprite PlayerShot pour représenter les tirs avec les mêmes composants que
précédemment, puis un prefab
Modifier son collider pour qu’il puisse déclencher des événements de type "trigger"
Lui ajouter MoveScript (qui doit donc être générique pour s’appliquer aux ennemis et aux
tirs) et tester
Lui ajouter un nouveau script ShotScript pour la gestion "interne" de ce tir
o Variables publiques :
entier damage
booléen fromEnemy (indique si c’est un tir du player ou de l’ennemi : ce script
sera générique également à ces 2 entités)
o Dans Start, autodestruction du tir au bout de 10 secondes
-
-
Créer un nouveau script HealthScript pour la gestion de la vie d’une entité (joueur ou
ennemi)
o Variables :
entier hp
bool isEnemy (script appartient à ennemi ou joueur)
o Dans OnTriggerEnter2D
tester si le trigger est un tir ennemi
diminuer les hp
détruire le projectile
détruire l’objet si besoin
Ajouter HealthScript à Poulpi et tester avec un tir dans la scène
6. Génération interactive de projectiles joueur
+ Input, Instantiate, GameObject, GetComponent
-
-
-
Ajouter un nouveau script WeaponScript au Player
o Variable
Un modèle de Shot à instancier (prefab)
o Créer un projectile dans Attack(bool isEnemy) qui sera déclenchée par un autre script
Instantier une copie du prefab donné
Accéder au script ShotScript de cette instance et affecter correctement
fromEnemy
Accéder au script MoveScript de cette instance et affecter direction vers la
droite du propriétaire de WeaponScript
Dans PlayerScript/Update(), ajouter
o L’appel à la fonction Attack() du WeaponScript lorsque l’on clique sur le bouton
gauche de la souris
Tester
7. Génération automatique de projectiles ennemis
+ Hierarchie, Array, foreach
-
-
-
Créer le préfab EnemyShot en dupliquant et modifiant PlayerShot
Faire les modifications/ajouts nécessaires au Poulpi pour qu’il puisse tirer
automatiquement (EnemyScript…) avec entre autres
o Variable shootingRate
o Gérer le shootCoolDown selon ce shootingRate dans Start() et Update()
o Tester s’il est possible de tirer selon ce cooldown : CanAttack()
o …
Pour que la direction du tir soit paramétrable sans modifier WeaponScript
o Utiliser un objet vide orientable WeaponObject fils de Poulpi et propriétaire de
WeaponScript
o Modifier l’accès à WeaponScript depuis EnemyScript
Tester et faire les ajustements nécessaires
Faire les modifications/ajouts nécessaires pour que Poulpi tire dans plusieurs directions
8. Build
+ Build settings
-
Générer une version du projet pour le web et tester
Générer une version du projet pour votre plateforme et tester
9. Ajouts divers
Se reporter au tutoriel original pour ajouter :
- Cooldown de tir joueur
- Effets de particules
- Effets sonores
- GUI
- Défilement avancé et limites
- Spawning des ennemis