Menu
CoddyTech

Raccogli un potenziamento

Lezione 15 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.

Il potenziamento rileva da solo la presa: il suo collider di attivazione tocca il collider della racchetta, ed entrambi i corpi sono cinematici, il che è sufficiente per OnTriggerEnter. Cade anche oltre la palla, quindi controlla prima il tag.

Un enum assegna un nome ai tipi, e ogni prefab imposta il proprio nell'Inspector, così uno script serve per entrambi:

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

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

other.GetComponent<Paddle>() trova lo script Paddle sull'oggetto toccato dal potenziamento. Per ora, Wide registra solo un messaggio; nella prossima lezione la racchetta si ingrandirà.

challenge icon

Sfida

Difficile

Prendi un potenziamento che cade con la racchetta.

  1. In PowerUp, aggiungi public enum Kind { Wide, Multiball } e public Kind kind; (ogni prefab imposta il proprio tipo).
  2. Aggiungi OnTriggerEnter(Collider other): esci se other.CompareTag("Paddle") è falso; un potenziamento Wide chiama other.GetComponent<Paddle>().Widen();, poi Destroy(gameObject);
  3. In Paddle, aggiungi public void Widen() che per ora registra Wide paddle.

Premi Gioca e prendi un potenziamento verde: scompare e la Console mostra Wide paddle. Poi premi Verifica.

Provalo tu

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // le facce interne delle pareti laterali si trovano a -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);
    }
}

Tutte le lezioni di Gioco in Unity: Rompi i mattoni

Esercitati da solo: Playground Unity