Menu
CoddyTech

Physics.Raycast

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

Tia raycast bắn một đường thẳng vô hình từ một điểm theo một hướng rồi cho biết đường đó có va chạm với collider hay không. Physics.Raycast(origin, direction, maxDistance) trả về true khi có collider nằm trên đường thẳng trong phạm vi maxDistance đơn vị, nếu không thì trả về false. Chiếc xe này phanh khi có vật thể nào cách đầu xe chưa đến 2 đơn vị:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward xoay theo xe, nên tia luôn hướng ra phía đầu xe; Vector3.forward thì luôn hướng dọc theo trục z của thế giới. Tia bắt đầu từ tâm xe, bên trong collider của chính nó, mà tia không bao giờ báo cáo collider chứa điểm bắt đầu, nên xe không phát hiện chính nó. Nếu bỏ maxDistance, tia sẽ kéo dài vô tận: xe sẽ phanh khi gặp một bức tường ở phía bên kia bản đồ.

Tia phát hiện collider chứ không phát hiện những gì được vẽ: một đối tượng có Renderer nhưng không có collider sẽ vô hình với tia, còn collider dạng trigger vẫn được tính là va chạm. Trong lúc kiểm tra, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) sẽ vẽ tia trong chế độ xem Scene của Unity.

challenge icon

Thử thách

Trung bình

Mở cửa hàng khi có người đứng bên dưới cảm biến.

  1. Trong Update(), kiểm tra Physics.Raycast(transform.position, Vector3.down, reach): một tia hướng thẳng xuống, dài reach đơn vị và dừng phía trên mặt đất.
  2. Nếu điều kiện đúng, gọi door.SetActive(false);, còn trong else, gọi door.SetActive(true);.

Nhấn Chơi rồi cho Visitor đi bên dưới cảm biến: cửa mở ra rồi đóng lại phía sau Visitor. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Mở cửa khi tia chiếu xuống từ Sensor chạm vào vật thể.
    }
}

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

Tự luyện tập: Playground Unity