Mình đã va chạm với gì?
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 9 trên 71.
Collision mà Unity truyền vào OnCollisionEnter mô tả phía bên kia của va chạm. collision.gameObject là đối tượng bạn va phải, nên collision.gameObject.name là tên của nó, còn collision.gameObject.CompareTag("Hazard") kiểm tra thẻ của nó. (collision.collider là collider chính xác mà bạn chạm vào, khi một đối tượng có nhiều collider.)
Chiếc xe đụng trong trò chơi này ghi lại mọi thứ nó va phải và phàn nàn về các mối nguy hiểm:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Bumped into " + collision.gameObject.name);
if (collision.gameObject.CompareTag("Hazard"))
{
Debug.Log("Ouch!");
}
}Dòng đầu tiên được ghi lại là Bumped into Floor, ngay khi trò chơi bắt đầu: sàn mà xe đứng trên đó cũng là một va chạm. Vì vậy, script phản ứng khi va chạm luôn kiểm tra xem nó đã va phải thứ gì trước tiên. Hãy chú ý bạn gọi tên đối tượng nào: CompareTag("Hazard") khi đứng riêng sẽ kiểm tra đối tượng của chính bạn, còn Destroy(gameObject) phá hủy đối tượng của bạn, trong khi Destroy(collision.gameObject) xóa đối tượng bạn va phải.
Thử thách
DễGiao nhiệm vụ cho xe ủi tuyết: dọn các khối được gắn thẻ Snow.
- Thêm
void OnCollisionEnter(Collision collision)vàoPlow, chỉ xử lý khicollision.gameObject.CompareTag("Snow"). - Bên trong, dùng
Destroy(collision.gameObject);, tăng trườngclearedthêm 1 và ghi nhật ký"Cleared " + cleared.
Nhấn Chơi rồi lái xe vào tuyết: mỗi khối sẽ biến mất và Console sẽ đếm số khối đó. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Plow : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
private int cleared;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
}
// Khi xe ủi gặp tuyết: xóa tuyết, đếm số lượng và ghi lại kết quả
}
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