
Ce livre s'adresse à tous ceux qui veulent créer des jeux, mais qui n'ont pas d'expérience de développement préalable. Unity prend en charge plusieurs langages de programmation. Dans ce livre, nous utiliserons C #. Avant de commencer à créer des jeux, vous devez comprendre les bases de leur conception, ainsi que le moteur de jeu Unity lui-même, donc dans la première partie du livre, nous étudierons ces problèmes. Dans les deuxième et troisième parties, nous examinerons respectivement le processus de création de jeux bidimensionnels et tridimensionnels, et dans la quatrième partie, nous parlerons d'autres fonctionnalités d'Unity, dont la connaissance vous sera utile.
6. La mise en œuvre du gameplay avec des pièges et des objectifs
Pièges simplesLa majeure partie de ce jeu consiste à manipuler les touches de divers objets - pièges, trésors, points de sortie, etc. Compte tenu de l'importance de déterminer quand toucher des objets spécifiques, nous allons créer un script commun qui génère un événement Unity lorsqu'un objet avec la balise «Player» les touche. Cet événement sera ensuite configuré différemment pour différents objets: les pièges informeront le Game Manager que le gnome a subi des dommages, le trésor signalera que le gnome a ramassé le trésor et le point de sortie est que le gnome a atteint la sortie.
Créez maintenant un nouveau script C # dans un fichier appelé SignalOnTouch.cs et ajoutez-y le code suivant:
using UnityEngine.Events; // UnityEvent, "Player" // . [RequireComponent (typeof(Collider2D))] public class SignalOnTouch : MonoBehaviour { // UnityEvent . // . public UnityEvent onTouch; // true, AudioSource. public bool playAudioOnTouch = true; // , // SendSignal. void OnTriggerEnter2D(Collider2D collider) { SendSignal (collider.gameObject); } // , // SendSignal. void OnCollisionEnter2D(Collision2D collision) { SendSignal (collision.gameObject); } // "Player" // UnityEvent, . void SendSignal(GameObject objectThatHit) { // "Player"? if (objectThatHit.CompareTag("Player")) { // , if (playAudioOnTouch) { var audio = GetComponent<AudioSource>(); // // , // if (audio && audio.gameObject.activeInHierarchy) audio.Play(); } // onTouch.Invoke(); } } }
La base de la classe SignalOnTouch est la méthode SendSignal, qui est appelée par les méthodes OnCollisionEnter2D et OnTriggerEnter2D. Les deux dernières méthodes sont appelées par le moteur Unity lorsque l'objet touche le collisionneur ou lorsque l'objet tombe dans la portée du déclencheur. La méthode SendSignal vérifie la balise de l'objet et, si elle stocke la chaîne "Player", génère un événement Unity.
Maintenant que vous avez la classe SignalOnTouch, vous pouvez ajouter le premier piège.
1. Importez des sprites d'objets. Importez le contenu du dossier Sprites / Objects dans le projet.
2. Ajoutez les pointes brunes. Trouvez le sprite SpikesBrown et faites-le glisser dans la scène.
3. Configurez l'objet avec des pointes. Ajoutez les composants PolygonCollider2D et SignalOnTouch à l'objet enrichi.
Ajoutez une nouvelle fonction à l'événement SignalOnTouch. Faites glisser le Game Manager dans le champ d'objet et sélectionnez la fonction GameManager.TrapTouched, comme indiqué sur la Fig. 6.1.
4. Convertissez l'objet enrichi en modèle. Faites glisser l'objet SpikesBrown du panneau Hiérarchie vers le dossier Level. En conséquence, un modèle sera créé avec lequel vous pourrez créer plusieurs copies de l'objet.
5. Testez-le. Lancez le jeu. Faites que le gnome touche les pointes. Ce gnome doit tomber et réapparaître!
Trésor et sortie
Après avoir ajouté avec succès le piège qui tue le gnome, il est temps d'ajouter l'opportunité de gagner la partie. Pour ce faire, ajoutez deux nouveaux éléments: un trésor et un point de sortie.
Un trésor est un sprite au fond d'un puits qui détecte le toucher d'un gnome et envoie un signal au Game Manager. Lorsque cela se produit, le gestionnaire de jeu dit au gnome qu'il a attrapé le trésor, après quoi le sprite avec l'image de la main vide du gnome est remplacé par le sprite avec l'image de la main tenant le trésor.
Un point de sortie est un autre sprite situé en haut du puits. Comme un trésor, il détecte une touche du gnome et en informe le gestionnaire de jeu. Si à ce moment le gnome détient le trésor, le joueur remporte la victoire dans le jeu.
Le travail principal dans ces deux objets est effectué par le composant SignalOnTouch - lorsque le gnome atteint le point de sortie, la méthode ExitReached du gestionnaire de jeu doit être appelée, et lorsque le gnome touche le trésor, la méthode TreasureCollected doit être appelée.
Commençons par créer un point de sortie, puis ajoutons un trésor.
Créer un point de sortie
Tout d'abord, nous importons des sprites.
1. Importer les sprites d'arrière-plan du niveau. Copiez le dossier Sprites / Background du package téléchargé avec des ressources dans le dossier Sprites du projet.
2. Ajoutez un dessus de sprite. Placez-le juste en dessous de l'objet Corde. Ce sprite servira de point de sortie.
3. Configurez l'image-objet. Ajoutez le composant Box Collider 2D au sprite et cochez la case Is Trigger. Cliquez sur le bouton Modifier le collisionneur et redimensionnez le collisionneur de sorte qu'il soit court et large, comme indiqué sur la Fig. 6.2.
4. Configurez l'envoi d'un signal au gestionnaire de jeu au moment de toucher le sprite. Ajoutez le composant SignalOnTouch au sprite. Ajoutez un élément à la liste d'événements du composant et connectez-le au Game Manager. Sélectionnez la fonction GameManager.ExitReached. Maintenant, toucher le gnome de sortie appellera la méthode ExitReached du Game Manager.
Ajoutez maintenant le trésor.
Le trésor fonctionne comme ceci: par défaut, l'objet Trésor affiche un sprite avec l'image du trésor. Lorsque le gnome le touche, la méthode TreasureCollected du Game Manager est appelée et un autre sprite s'affiche à la place du trésor, indiquant que le trésor a été récupéré. Lorsque le gnome meurt, l'objet Trésor revient à son état d'origine et affiche à nouveau l'image-objet avec l'image du trésor.
Étant donné que le changement de sprites dans le jeu sera effectué assez souvent - vous le verrez lorsque nous améliorerons les graphismes - il est logique de créer une classe universelle pour changer les sprites et de l'utiliser dans l'objet trésor.
Créez un nouveau script C # appelé SpriteSwapper.cs. Ajoutez-y le code suivant:
// . , // ' ' ' '. public class SpriteSwapper : MonoBehaviour { // , . public Sprite spriteToUse; // , // . public SpriteRenderer spriteRenderer; // . ResetSprite. private Sprite originalSprite; // . public void SwapSprite() { // ... if (spriteToUse != spriteRenderer.sprite) { // originalSprite originalSprite = spriteRenderer.sprite; // . spriteRenderer.sprite = spriteToUse; } } // . public void ResetSprite() { // ... if (originalSprite != null) { // ... . spriteRenderer.sprite = originalSprite; } } }
La classe SpriteSwapper est conçue pour deux opérations: lorsque la méthode SwapSprite est appelée, un autre Sprite est transmis au visualiseur SpriteRenderer connecté à l'objet de jeu pour affichage. Dans ce cas, le sprite d'origine est stocké dans une variable. Lorsque la méthode ResetSprite est appelée, le visualiseur reçoit le sprite d'origine à afficher.
Vous pouvez maintenant créer et personnaliser l'objet Treasure.
1. Ajoutez un sprite avec une image au trésor. Trouvez le sprite TreasurePresent et ajoutez-le à la scène. Placez-le près du fond, mais de telle manière que le gnome puisse l'obtenir.
2. Ajoutez un collisionneur pour le trésor. Sélectionnez l'image-objet avec l'image du trésor et ajoutez-y le composant Box Collider 2D. Cochez la case Est un déclencheur.
3. Ajoutez et configurez un script pour changer le sprite. Ajoutez le composant SpriteSwapper. Faites glisser l'image-objet avec l'image du trésor dans le champ Rendu de l'image-objet de ce composant. Trouvez ensuite le sprite TreasureAbsent et faites-le glisser dans le champ Sprite To Use du changeur de sprites.
4. Ajoutez et configurez le composant d'envoi de signal en réponse à un tap. Ajoutez le composant SignalOnTouch. Ajoutez deux éléments à la liste On Touch:
- premier lien vers l'objet Game Manager et sélectionnez la méthode GameManager.TreasureCollected;
- associez le second au sprite au trésor (c'est-à-dire à l'objet que vous configurez actuellement) et sélectionnez la méthode SpriteSwapper.SwapSprite.
5. Ajoutez et configurez le composant Réinitialisable. Ajoutez un composant réinitialisable à l'objet. Ajoutez un seul élément à la liste On Touch, sélectionnez la méthode SpriteSwapper.ResetSprite et associez-le à l'objet Treasure.
Par conséquent, les paramètres du panneau d'inspection doivent ressembler à ceux de la Fig. 6.3.
6. Testez le jeu. Lancez le jeu et touchez le trésor. À ce moment, le trésor disparaîtra; si après cela le gnome meurt, le trésor réapparaîtra à sa place après la création du nouveau gnome.
Ajouter un arrière-plan
Actuellement, le jeu se déroule sur un fond bleu terne défini par défaut dans Unity. Dans cette section, nous ajouterons un arrière-plan temporaire, que nous remplacerons par un sprite d'arrière-plan lorsque nous commencerons à améliorer la conception graphique du jeu.
1. Ajoutez un rectangle d'arrière-plan. Ouvrez le menu GameObject et sélectionnez Objet 3DQuad (Objet 3DRectangle). Nommez le nouvel objet Arrière-plan.
2. Déplacez l'arrière-plan à l'arrière-plan. Pour éviter la situation où un arrière-plan rectangulaire sera dessiné au-dessus des sprites du jeu, déplacez-le vers l'arrière-plan, loin de la caméra. Pour ce faire, définissez la coordonnée Z du rectangle sur 10.
3. Définissez la largeur et la hauteur du rectangle d'arrière-plan. Activez l'outil Rect en appuyant sur la touche T, puis utilisez les poignées pour définir les dimensions du rectangle. Le bord supérieur de l'arrière-plan doit être au même niveau que le sprite en haut de la scène et le bas avec le trésor (Fig. 6.4).
4. Testez le jeu. Après le démarrage, l'arrière-plan du terrain de jeu doit devenir gris foncé.
»Plus d'informations sur le livre sont disponibles sur
le site Web de l'éditeur»
Contenu»
Extrait20% de réduction sur les colporteurs -
Unity