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.
Tantangan
MudahDi Ball:
- Di
Awake(), buatnew PhysicsMaterial("Bouncy")dengan bounciness 1, dynamic dan static friction 0,bounceCombineMaximum danfrictionCombineMinimum, lalu pasangkan material itu ke collider bola denganGetComponent<Collider>().material. - Tambahkan
FixedUpdate(): saat bola sudah diluncurkan, aturlinearVelocity-nya ke arah geraknya saat ini dikalikanspeed.
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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.