Papan Pemukul
Pelajaran 1 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.
Dalam kursus ini, kamu membuat Brick Breaker dalam 3D: sebuah paddle di bagian bawah, sebuah bola yang memantul di antara dinding, dan dinding dari batu bata yang harus dihancurkan. Setiap pelajaran menambahkan satu fitur: batu bata, nyawa, level, layar game over, dan power-up yang memperlebar paddle atau membelah bola. Scene sudah siap: kamera menghadap playfield dari depan, dan semuanya bergerak pada bidang x dan y di z = 0. Script Paddle, Ball, Brick, GameManager dan PowerUp saat ini masih berupa stub singkat.
Paddle memiliki Rigidbody kinematic, yang digerakkan dengan MovePosition di FixedUpdate, sehingga physics mendeteksi gerakannya dan nantinya pantulan bola dapat memanfaatkannya. Body kinematic tidak pernah dihentikan oleh collider yang tidak memiliki Rigidbody, jadi dinding samping tidak akan menahannya: script yang menjaganya tetap di dalam. Membatasi bagian tengahnya di dinding akan membuat separuh object berada di dalam dinding, jadi batasnya adalah posisi dinding dikurangi setengah ukuran object. Mobil lift di dalam shaft dari y = 0 sampai y = 12 ini menerapkan hal tersebut pada y:
float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);Di sini, input bernilai 1 untuk bergerak ke atas, -1 untuk bergerak ke bawah, dan 0 jika tidak bergerak. Mobil setinggi 2 unit menjaga bagian tengahnya di antara 1 dan 11, sehingga ujung-ujungnya berhenti tepat di 0 dan 12. Primitive Cube memiliki panjang 1 unit di setiap sisi, jadi localScale.y adalah tinggi mobil, dan membacanya pada setiap langkah memastikan batasnya tetap tepat jika ukurannya berubah saat game berjalan.
Tantangan
MudahTulis pergerakan paddle di Paddle FixedUpdate():
- Buat
float input: -1 saat tombol panah kiri atau A ditekan, 1 saat tombol panah kanan atau D ditekan, dan 0 jika tidak. - Tentukan targetnya: posisi Rigidbody yang bergerak ke kanan sejauh
input * speed * Time.fixedDeltaTime. - Batasi x target agar ujung paddle berhenti di sisi dalam dinding,
-wallXdanwallX. Lebar paddle adalahtransform.localScale.x. - Pindahkan paddle ke sana dengan
rb.MovePosition.
Tekan Mainkan, geser paddle hingga menyentuh kedua dinding, lalu tekan 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()
{
// Bergeraklah dengan tombol panah atau A dan D, dan tetaplah di antara dinding.
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.