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.
Défi
Moyen- Dans
Brick, ajoutepublic int hits = 1etpublic Color[] colors. Dans la scène, rempliscolorsde bleu, d’orange et de rouge, pour 1, 2 et 3 impacts restants. - Écris
public void SetHits(int count): cette méthode définithitset affiche la couleur correspondante de la brique. - Modifie
Hit(): retire un àhits. À 0, la brique se casse et rapporte des points comme auparavant ; sinon, elle affiche simplement sa nouvelle couleur. - Dans
GameManager, ajoutepublic int[] rowHits = { 2, 1, 1, 1, 1 };et attribue à chaque nouvelle briquerowHits[row]impacts avecSetHits.
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);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.