Menu
CoddyTech

Pertahankan Kecepatan

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

Bola Brick Breaker tidak pernah melambat. PhysicsMaterial-nya melakukan sebagian besar pekerjaan: bounciness 1 mempertahankan semua kecepatan pantulan, dan friction 0 mencegah dinding menyeret atau memutar bola. Dinding dan balok tidak memiliki material sendiri, dan Unity menggabungkan nilai kedua collider, secara default dengan Average: nilai 1 milik bola dan nilai default 0 milik dinding membuat pantulan terjadi dengan setengah kecepatan. bounceCombine = Maximum dan frictionCombine = Minimum membuat nilai milik bola sendiri menjadi acuan, apa pun yang ditabraknya.

Fisika ini masih belum sepenuhnya akurat: paddle yang bergerak menambahkan kecepatannya sendiri ke pantulan, dua bola saling mendorong, dan kesalahan kecil menumpuk selama ratusan pantulan. Jadi, setiap FixedUpdate, arah bola dipertahankan dan kecepatannya diatur kembali. Rigidbody milik Ball juga memiliki Freeze Position Z yang dicentang di Inspector, sehingga bola tetap berada di bidang permainan.

Game lain membutuhkan aturan yang berbeda. Puck hoki udara boleh melambat, tetapi kecepatannya tidak boleh melebihi batas, dan Vector3.ClampMagnitude memperpendek vektor yang terlalu panjang dan membiarkan vektor yang lebih pendek tetap seperti semula:

void FixedUpdate()
{
    rb.linearVelocity = Vector3.ClampMagnitude(rb.linearVelocity, maxSpeed);
}

Batas kecepatan saja tidak cukup untuk bola: jika kecepatannya diperlambat menjadi 2 unit per detik, kecepatannya akan tetap 2. Kecepatannya perlu diatur secara tepat berdasarkan arahnya.

challenge icon

Tantangan

Mudah

Di Ball:

  1. Di Awake(), buat new PhysicsMaterial("Bouncy") dengan bounciness 1, dynamic dan static friction 0, bounceCombine Maximum dan frictionCombine Minimum, lalu pasangkan material itu ke collider bola dengan GetComponent<Collider>().material.
  2. Tambahkan FixedUpdate(): saat bola sudah diluncurkan, atur linearVelocity-nya ke arah geraknya saat ini dikalikan speed.

Di Unity, kamu juga bisa membuat material sebagai aset (Create > Physics Material) dan menyeretnya ke slot Material pada Sphere Collider. Di sini, script yang membuatnya.

Tekan Play, luncurkan bola dan lihat pantulannya, lalu tekan Periksa.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Brick Breaker