Casse
Leçon 6 sur 19 du cours Jeu Unity : casse-briques de Coddy.
Les briques n’ont pas de Rigidbody, mais la balle en a un, et Unity envoie OnCollisionEnter aux deux objets lors d’une collision. Une brique peut donc détecter elle-même le choc. Dans le script de la brique, gameObject désigne la brique et collision.gameObject désigne l’objet qui l’a percutée.
Le score appartient au GameManager, et les briques sont des copies d’un prefab. Un prefab est un asset situé hors de la scène ; ses champs ne peuvent donc pas pointer vers le GameManager de la scène dans l’Inspector. Le GameManager définit GameManager.Instance comme une référence statique vers lui-même dans Awake(), ce qui permet à n’importe quel script d’y accéder, y compris les copies du prefab.
Un vase qui se brise lorsque le joueur le percute :
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}Destroy(gameObject) supprime le vase. Destroy(collision.gameObject) supprimerait le joueur, et Destroy(this) supprime uniquement le script, en laissant le vase debout. Le fait de conserver la destruction dans sa propre méthode publique permet aussi à d’autres éléments de code, comme une bombe ou un bonus, de briser le vase.
Défi
MoyenLa balle casse les briques et rapporte leurs points.
- Dans
GameManager, ajouteint score;etpublic void BrickBroken(Brick brick), qui ajoutebrick.pointsau score. - Dans
Brick, écrispublic void Hit():GameManager.Instance.BrickBroken(this);, puisDestroy(gameObject); - Dans
OnCollisionEnterde Brick, appelleHit()lorsque l’objet porte l’étiquetteBall.
Appuie sur « Jouer » et lance la balle : chaque brique qu’elle touche disparaît. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Ensuite : la balle casse une brique et marque les points correspondants.
}
Toutes les leçons de Jeu Unity : casse-briques
Entraînez-vous par vous-même : Playground Unity