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.
Tantangan
Sulit- Di
PowerUp, tambahkanpublic enum Kind { Wide, Multiball }danpublic Kind kind(setiap prefab menetapkan kind-nya). TambahkanOnTriggerEnter: saat power-up menyentuh object dengan tagPaddle, power-up Wide memanggilWiden()pada scriptPaddlemilik object tersebut, dan kedua jenis power-up menghancurkan dirinya. - Di
Paddle, tambahkanpublic float wideFactor = 1.6fdanpublic float wideSeconds = 8f, lalu simpan lebar normal paddle, yaitu skala x-nya, diAwake(). - Tulis
public void Widen(): fungsi ini memulai coroutine yang mengatur skala x paddle menjadiwideFactorkali lebar normal, menunggu selamawideSeconds, 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);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.