Menu
CoddyTech

Pegue um power-up

Lição 15 de 19 do curso Jogo Unity: Quebra-Tijolos da Coddy.

Um bônus percebe a captura por conta própria: seu colisor de gatilho toca o colisor da raquete, e ambos os corpos são cinemáticos, o que basta para OnTriggerEnter. Ele também passa pela bola, então verifica a tag primeiro.

Um enum nomeia os tipos, e cada prefab define o seu no Inspector, então um script serve para ambos:

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

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

other.GetComponent<Paddle>() encontra o script Paddle no objeto que o bônus tocou. Por enquanto, Widen apenas registra uma mensagem; na próxima lição, a raquete vai crescer.

challenge icon

Desafio

Difícil

Pegue um bônus que está caindo com a raquete.

  1. Em PowerUp, adicione public enum Kind { Wide, Multiball } e public Kind kind; (cada prefab define seu tipo).
  2. Adicione OnTriggerEnter(Collider other): retorne a menos que other.CompareTag("Paddle"); um bônus Wide chama other.GetComponent<Paddle>().Widen(); e, em seguida, Destroy(gameObject);
  3. Em Paddle, adicione public void Widen() que, por enquanto, registra Wide paddle.

Pressione “Jogar” e pegue um bônus verde: ele desaparece e o Console exibe Wide paddle. Em seguida, clique em “Verificar”.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // as faces internas das paredes laterais estão em -wallX e 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);
    }
}

Todas as lições de Jogo Unity: Quebra-Tijolos

Pratique por conta própria: Playground de Unity