Độ nảy và ma sát
Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 12 trên 71.
Cách bộ va chạm nảy lên và trượt phụ thuộc vào PhysicsMaterial (tên trong Unity 6; các phiên bản cũ gọi là PhysicMaterial). bounciness có giá trị từ 0 (không nảy) đến 1 (giữ nguyên toàn bộ tốc độ). dynamicFriction làm chậm vật thể đang trượt, còn staticFriction quyết định cần đẩy mạnh đến mức nào để vật thể đang đứng yên bắt đầu trượt. Bộ va chạm không có vật liệu hoạt động như thể có ma sát 0.6 và độ nảy 0. Quả bóng siêu nảy này gán cho bộ va chạm của nó một vật liệu có độ nảy cao:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // bản sao riêng của collider này
mat.bounciness = 0.9f;
mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}Một lần tiếp xúc có hai bộ va chạm, vì vậy Unity kết hợp hai giá trị của chúng. Mỗi vật liệu chọn cách kết hợp bằng bounceCombine cho độ nảy và frictionCombine cho ma sát; mỗi thuộc tính có bốn chế độ: Average (mặc định), Minimum, Multiply hoặc Maximum. Khi hai bộ va chạm chọn các chế độ khác nhau, chế độ xuất hiện sau trong danh sách sẽ được ưu tiên. Trên sàn không có vật liệu, chế độ Average sẽ cho quả bóng giá trị (0.9 + 0) / 2 = 0.45. Với chế độ Maximum, bóng giữ 0.9 tốc độ sau mỗi lần nảy, tương đương 0.9 x 0.9 = 81% độ cao, vì độ cao tỷ lệ với bình phương tốc độ.
.material tạo một bản sao vật liệu riêng cho bộ va chạm này, nên các thay đổi chỉ ảnh hưởng đến nó. .sharedMaterial là chính tài nguyên vật liệu, được mọi bộ va chạm sử dụng chung; thuộc tính này có giá trị null nếu bộ va chạm chưa từng được gán vật liệu.
Thử thách
DễThiết lập độ nảy và ma sát riêng cho tấm bạt lò xo và băng.
- Trong
Start(), lấyPhysicsMaterial mat = GetComponent<Collider>().material;rồi đặtmat.bounciness = bounce;,mat.dynamicFrictionvàmat.staticFrictionthànhfriction. - Đặt
mat.bounceCombine = PhysicsMaterialCombine.Maximum;vàmat.frictionCombine = PhysicsMaterialCombine.Minimum;để các giá trị riêng của bề mặt được ưu tiên.
Nhấn Chơi: quả bóng nảy cao khỏi tấm bạt lò xo. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// Gán cho collider này một vật liệu riêng có độ nảy và ma sát
}
}
Tất cả bài học trong Vật lý và lối chơi
1Rigidbody
Trọng lực và khối lượngĐẩy bằng AddForceNhảy bằng xung lựcFixedUpdate cho vật lýVận tốcVật thể động họcÔn tập: Bệ phóng4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine đầu tiên của bạnVòng lặp trong CoroutineDừng CoroutineÔn tập: đếm ngược10Dự án: Thoát khỏi đấu trường
Đấu trườngThợ săn2Va chạm
OnCollisionEnterMình đã va chạm với gì?Vỡ khi va chạmĐứng trên mặt đấtĐộ nảy và ma sátHình dạng colliderÔn tập: Tường có thể phá vỡ5Dự án: Cuộc đua thu thập xu
Quả bóng lănThu thập xuTự luyện tập: Playground Unity