Menu
CoddyTech

Độ 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.

challenge icon

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.

  1. Trong Start(), lấy PhysicsMaterial mat = GetComponent<Collider>().material; rồi đặt mat.bounciness = bounce;, mat.dynamicFriction và mat.staticFriction thành friction.
  2. Đặ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

Tự luyện tập: Playground Unity