OnTriggerEnter
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 16 trên 71.
void OnTriggerEnter(Collider other) chạy một lần, ở bước vật lý khi một bộ va chạm khác bắt đầu chồng lấn với một trigger. other là bộ va chạm đó, vì vậy other.name, other.gameObject và other.CompareTag("Player") cho bạn biết thứ gì đã đi vào. Unity gọi hàm này trong script của cả hai đối tượng: trên đối tượng trigger, other là đối tượng đi vào, còn trên đối tượng đi vào, other là trigger.
Vạch đích này chỉ phản ứng với người chơi, không phản ứng với thứ gì khác, vì vậy quả bóng lăn qua sẽ không ghi lại gì:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log(other.name + " crossed the finish line");
}
}Tham số phải có kiểu Collider. Nếu viết thành void OnTriggerEnter(Collision collision), script vẫn biên dịch vì với C# đây là một phương thức thông thường. Unity kiểm tra chính tham số đó, ghi lại lỗi Script error: OnTriggerEnter với nội dung This message parameter has to be of type: Collider, rồi không bao giờ gọi phương thức này. Collision thuộc về OnCollisionEnter, nơi hai vật thể rắn chạm nhau tại một điểm tiếp xúc. Trigger không có tiếp xúc nào cần báo cáo, mà chỉ có bộ va chạm, vì vậy nó nhận Collider.
Thử thách
DễSửa phương thức của trạm thu phí, rồi thu phí từ những chiếc ô tô.
- Nhấn Chơi: Console hiển thị lỗi về phương thức. Đổi thành
void OnTriggerEnter(Collider other). - Bên trong phương thức, khi
other.CompareTag("Car")đúng, cộngtollvàocollectedrồi ghi nhật ký"Toll: " + collected. Người đi xe đạp được qua miễn phí.
Nhấn Chơi: Console hiển thị Toll: 3, rồi Toll: 6. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class TollGate : MonoBehaviour
{
public int toll = 3;
int collected;
void OnTriggerEnter(Collision collision)
{
// Ô tô trả phí qua trạm; mọi thứ khác đi qua miễn phí
}
}
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