Menu
CoddyTech

Pemukul Lebar

Pelajaran 14 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.

Power-up Wide yang tertangkap paddle membuat paddle lebih lebar selama beberapa detik. Power-up mendeteksi tangkapan tersebut: collider pemicunya menyentuh collider paddle, dan kedua body bersifat kinematic, yang sudah cukup untuk OnTriggerEnter. Power-up juga melewati bola saat jatuh, jadi power-up memeriksa tag-nya. Enum yang berisi jenis-jenis power-up, ditetapkan untuk setiap prefab di Inspector, membedakan satu power-up dari yang lain.

Efek berdurasi tertentu menggunakan coroutine: ubah, tunggu, lalu ubah kembali. Tangkapan kedua saat tangkapan pertama masih berjalan harus memulai ulang waktunya, jadi simpan Coroutine yang dikembalikan oleh StartCoroutine dan hentikan coroutine tersebut sebelum memulai yang baru. Jika tidak, coroutine pertama akan berakhir lebih awal dan membatalkan efek kedua. Peningkatan kecepatan:

Coroutine boost;

public void Boost()
{
    if (boost != null) StopCoroutine(boost);
    boost = StartCoroutine(BoostFor(3f));
}

IEnumerator BoostFor(float seconds)
{
    speed = normalSpeed * 2f;
    yield return new WaitForSeconds(seconds);
    speed = normalSpeed;
    boost = null;
}

Peningkatan ini menetapkan kecepatan berdasarkan normalSpeed, yang disimpan sekali, alih-alih menggandakan kecepatan saat ini lalu membaginya dua nanti: dua peningkatan berturut-turut akan membuat kecepatannya menjadi 4 kali lebih cepat. Batas paddle sudah membaca lebarnya pada setiap langkah, jadi paddle yang lebar tetap berhenti di dinding.

challenge icon

Tantangan

Sulit
  1. Di PowerUp, tambahkan public enum Kind { Wide, Multiball } dan public Kind kind (setiap prefab menetapkan kind-nya). Tambahkan OnTriggerEnter: saat power-up menyentuh object dengan tag Paddle, power-up Wide memanggil Widen() pada script Paddle milik object tersebut, dan kedua jenis power-up menghancurkan dirinya.
  2. Di Paddle, tambahkan public float wideFactor = 1.6f dan public float wideSeconds = 8f, lalu simpan lebar normal paddle, yaitu skala x-nya, di Awake().
  3. Tulis public void Widen(): fungsi ini memulai coroutine yang mengatur skala x paddle menjadi wideFactor kali lebar normal, menunggu selama wideSeconds, lalu mengembalikan lebar normal. Jika power-up tertangkap saat paddle sedang lebar, waktunya dimulai ulang.

Power-up Multiball tertangkap dan belum melakukan apa pun.

Tekan Play, tangkap power-up hijau, lalu tekan Check.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // Sisi dalam dinding samping berada pada -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);
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Brick Breaker