Menu
CoddyTech

OnCollisionEnter

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 8 trên 71.

Khi hai collider bắt đầu chạm nhau, Unity gọi OnCollisionEnter(Collision collision) trong các script của cả hai đối tượng. Phương thức này được gọi một lần ở bước vật lý bắt đầu va chạm, không gọi lại khi chúng vẫn tiếp xúc. Để xảy ra va chạm, ít nhất một trong hai đối tượng cần có Rigidbody được vật lý di chuyển: tường và sàn không có Rigidbody sẽ không bao giờ gửi thông tin cho nhau.

Thùng này ghi nhật ký khi tiếp đất. Nó có Rigidbody nên rơi xuống, và thông báo xuất hiện ở bước nó chạm sàn:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Thud!");
}

Thùng ghi nhật ký một lần, rồi chỉ ghi lại sau khi rời sàn và tiếp đất lần thứ hai. Sàn cũng nhận được thông báo: script gắn trên sàn sẽ phát hiện thùng tiếp đất, dù sàn không có Rigidbody. Tên phương thức và tham số phải chính xác. Phương thức tên onCollisionEnter sẽ không bao giờ được gọi và không báo lỗi. Phương thức nhận Collider sẽ khiến Unity ghi nhật ký Script error: OnCollisionEnter kèm theo This message parameter has to be of type: Collision, rồi bỏ qua phương thức đó. Khi cả hai vẫn tiếp xúc, Unity gọi OnCollisionStay ở mỗi bước vật lý, còn khi chúng tách nhau, Unity gọi OnCollisionExit một lần.

challenge icon

Thử thách

Dễ

Tấm áp lực đếm những gì rơi lên nó.

  1. Thêm một trường private int presses; vào PressurePlate.
  2. Thêm void OnCollisionEnter(Collision collision): tăng presses lên 1 và ghi nhật ký "Pressed " + presses.

Nhấn Chơi: thùng rơi xuống và Console hiển thị Pressed 1 một lần. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // Đếm mỗi lần đáp xuống và ghi vào nhật ký: Pressed 1, Pressed 2, ...
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity