Menu
CoddyTech

Briques solides

Leçon 7 sur 19 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

Les briques de la rangée du haut nécessitent deux coups.

  1. Dans Brick, ajoute public int hits = 1;, public Color[] colors; (la scène définit le bleu, l’orange et le rouge) ainsi que SetHits(int count) : définis hits et la couleur colors[hits - 1].
  2. Hit() retire un coup à hits : à 0, la brique se casse et rapporte des points ; sinon, elle affiche la nouvelle couleur.
  3. Dans GameManager, ajoute public int[] rowHits = { 2, 1, 1, 1, 1 }; et appelle brick.SetHits(rowHits[row]) pour chaque nouvelle brique.

Appuie sur « Jouer » : la rangée du haut est orange et devient bleue lorsqu’on la frappe. Puis clique sur « Vérifier ».

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);
    }
}

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

Entraînez-vous par vous-même : Playground Unity