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.
Thử thách
DễTấm áp lực đếm những gì rơi lên nó.
- Thêm một trường
private int presses;vàoPressurePlate. - Thêm
void OnCollisionEnter(Collision collision): tăngpresseslê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
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