Menu
CoddyTech

Briques solides

Leçon 7 sur 16 du cours Jeu Unity : casse-briques de Coddy.

Certains blocs nécessitent plusieurs coups. Chaque bloc conserve le nombre de coups qu'il lui reste : un coup en retire un, et seul le coup qui le ramène à 0 casse le bloc et rapporte des points. En attendant, le bloc change de couleur pour que le joueur puisse voir à quel point il est encore résistant.

Un tableau de couleurs rempli dans l'Inspector associe le nombre de coups à une couleur. L'élément 0 correspond à la couleur lorsqu'il reste un coup, l'élément 1 à celle lorsqu'il en reste deux, donc la couleur correspondant au nombre n est l'élément n - 1. Un bouclier avec des charges fonctionne de la même façon :

public Color[] chargeColors;   // élément 0 : il reste 1 charge

void ShowCharges(int charges)
{
    GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}

La première fois qu'on lit material, ce renderer reçoit sa propre copie du matériau ; ainsi, un bouclier ou un bloc change de couleur sans repeindre chaque copie du prefab. Le GameManager décide de la résistance de chaque nouveau bloc : un int[] contenant un nombre par rangée, en commençant par la rangée du haut, permet à la rangée du haut de nécessiter plus de coups que les autres.

challenge icon

Défi

Moyen
  1. Dans Brick, ajoute public int hits = 1 et public Color[] colors. Dans la scène, remplis colors de bleu, d’orange et de rouge, pour 1, 2 et 3 impacts restants.
  2. Écris public void SetHits(int count) : cette méthode définit hits et affiche la couleur correspondante de la brique.
  3. Modifie Hit() : retire un à hits. À 0, la brique se casse et rapporte des points comme auparavant ; sinon, elle affiche simplement sa nouvelle couleur.
  4. Dans GameManager, ajoute public int[] rowHits = { 2, 1, 1, 1, 1 }; et attribue à chaque nouvelle brique rowHits[row] impacts avec SetHits.

Appuie sur Play, use une brique orange de la rangée supérieure, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ball")) Hit();
    }

    public void Hit()
    {
        GameManager.Instance.BrickBroken(this);
        Destroy(gameObject);
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Unity : casse-briques