Menu
CoddyTech

Attrapez un bonus

Leçon 15 sur 19 du cours Jeu Unity : casse-briques de Coddy.

Un bonus détecte lui-même la capture : son collider de déclenchement touche celui de la raquette, et les deux corps sont cinématiques, ce qui suffit pour OnTriggerEnter. Il tombe aussi au-delà de la balle, alors il vérifie d’abord le tag.

Une énumération nomme les types, et chaque prefab définit le sien dans l’Inspector, de sorte qu’un seul script sert aux deux :

public enum Kind { Wide, Multiball }
public Kind kind;

if (kind == Kind.Multiball) Debug.Log("Three balls");

other.GetComponent<Paddle>() trouve le script Paddle sur l’objet touché par le bonus. Pour l’instant, Wide ne fait qu’afficher un message ; la prochaine leçon fera grandir la raquette.

challenge icon

Défi

Difficile

Attrape une amélioration qui tombe avec la raquette.

  1. Dans PowerUp, ajoute public enum Kind { Wide, Multiball } et public Kind kind; (chaque prefab définit son type).
  2. Ajoute OnTriggerEnter(Collider other) : retourne sauf si other.CompareTag("Paddle") ; une amélioration Wide appelle other.GetComponent<Paddle>().Widen();, puis Destroy(gameObject);
  3. Dans Paddle, ajoute public void Widen(), qui affiche Wide paddle pour le moment.

Appuie sur « Jouer » et attrape une amélioration verte : elle disparaît et la Console affiche Wide paddle. Puis clique sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // les faces intérieures des murs latéraux se trouvent à -wallX et wallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float input = 0f;
        if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
        if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;

        Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
        float halfWidth = transform.localScale.x / 2f;
        target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
        rb.MovePosition(target);
    }
}

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

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