Giữ tốc độ
Bài học 3 trên 19 trong khóa học Trò chơi Unity: phá gạch của Coddy.
Quả bóng trong Brick Breaker không bao giờ chậm lại. PhysicsMaterial xử lý phần lớn việc này: độ nảy 1 giữ nguyên toàn bộ tốc độ sau mỗi lần nảy, còn ma sát 0 giúp tường không kéo quả bóng chậm lại. Tường không có vật liệu, và theo mặc định, Unity lấy giá trị trung bình của hai collider: giá trị 1 của quả bóng và giá trị 0 của tường khiến quả bóng nảy với tốc độ chỉ bằng một nửa. bounceCombine = Maximum và frictionCombine = Minimum giúp các giá trị riêng của quả bóng được ưu tiên.
Vật lý vẫn chưa hoàn toàn chính xác: một thanh đỡ đang di chuyển sẽ truyền thêm tốc độ cho quả bóng, còn các sai số nhỏ tích lũy qua hàng trăm lần nảy. Vì vậy, ở mỗi bước vật lý, quả bóng giữ nguyên hướng di chuyển và được đặt lại tốc độ:
rb.linearVelocity = rb.linearVelocity.normalized * 7f;Quả bóng đang giảm tốc xuống còn 2 đơn vị mỗi giây sẽ bay với tốc độ 7 trở lại ở bước tiếp theo.
Thử thách
DễKhiến bóng nảy mãi với cùng một tốc độ.
- Trong
Awake()củaBall, tạonew PhysicsMaterial("Bouncy")với độ nảy là 1, cả hai hệ số ma sát đều bằng 0,bounceCombine = PhysicsMaterialCombine.MaximumvàfrictionCombine = PhysicsMaterialCombine.Minimum; đặt vật liệu này vàoGetComponent<Collider>().material. - Thêm
FixedUpdate(): nếu bóng đã được phóng, hãy chạyrb.linearVelocity = rb.linearVelocity.normalized * speed;
Nhấn Chơi rồi phóng bóng: bóng sẽ nảy khỏi mọi bức tường mà không giảm tốc độ. Sau đó nhấn Kiểm tra.
Tự làm thử
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;
}
}
Tất cả bài học trong Trò chơi Unity: phá gạch
Tự luyện tập: Playground Unity