Menu
CoddyTech

Ambil Power-Up

Pelajaran 15 dari 19 dalam kursus Game Unity: Brick Breaker di Coddy.

Power-up mendeteksi tabrakan itu sendiri: trigger collider-nya menyentuh collider paddle, dan kedua objek bersifat kinematic, sehingga OnTriggerEnter dapat berjalan. Power-up juga melewati bola, jadi periksa tag terlebih dahulu.

Enum memberi nama pada jenis-jenisnya, dan setiap prefab mengatur jenisnya sendiri di Inspector, sehingga satu skrip bisa menangani keduanya:

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

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

other.GetComponent<Paddle>() menemukan skrip Paddle pada objek yang disentuh power-up. Untuk saat ini, Wide hanya mencatat log; pelajaran berikutnya membuat paddle membesar.

challenge icon

Tantangan

Sulit

Tangkap power-up yang jatuh dengan paddle.

  1. Di PowerUp, tambahkan public enum Kind { Wide, Multiball } dan public Kind kind; (setiap prefab menentukan jenisnya).
  2. Tambahkan OnTriggerEnter(Collider other): kembalilah jika other.CompareTag("Paddle") tidak benar; power-up jenis Wide memanggil other.GetComponent<Paddle>().Widen();, lalu Destroy(gameObject);
  3. Di Paddle, tambahkan public void Widen() yang untuk saat ini mencatat Wide paddle.

Tekan tombol “Main” dan tangkap power-up berwarna hijau: power-up itu menghilang dan Console menampilkan Wide paddle. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // sisi dalam dinding samping berada di -wallX dan 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);
    }
}

Semua pelajaran di Game Unity: Brick Breaker

Latihan sendiri: Playground Unity