Menu
CoddyTech

RaycastHit

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

Physics.Raycast cũng có thể cho bạn biết nó đã va vào đâu. Thêm out RaycastHit hit sau hướng: khi phương thức trả về true, nó đã điền thông tin chi tiết vào hit. out là cách một phương thức C# trả về một giá trị bổ sung thông qua biến mà bạn cung cấp. Máy đo khoảng cách này ghi lại vật mà nó hướng tới và khoảng cách đến vật đó khi bạn nhấn phím cách:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Khi hướng vào một bức tường có mặt trước cách 12 đơn vị, nó ghi lại Wall is 12 units away. Các trường khác: hit.point là vị trí trong thế giới nơi tia chạm vào bề mặt, hit.normal là hướng mà bề mặt hướng về tại vị trí đó ((0, 1, 0) trên mặt đất phẳng), còn hit.transform là Transform của đối tượng bị va chạm. Thông qua hit.collider.gameObject, bạn có thể truy cập mọi thông tin khác về đối tượng đó, chẳng hạn như thẻ của nó.

Chỉ đọc hit bên trong if. Khi tia không chạm vào vật nào, Raycast trả về false và hit không chứa thông tin hữu ích nào: collider của nó là null.

challenge icon

Thử thách

Trung bình

Gắn ống ngắm laser cho khẩu súng: một chấm đỏ ở nơi tia laser chiếu tới.

  1. Trong Update(), thực hiện phép chiếu tia bằng Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Khi tia chạm vật thể, gọi dot.gameObject.SetActive(true); và đặt dot.position = hit.point;.
  3. Khi tia không chạm vật thể, gọi dot.gameObject.SetActive(false);.

Nhấn Chơi rồi xoay khẩu súng: chấm đỏ trượt trên tường và các thùng. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Đặt dot tại vị trí tia laser chạm vào bề mặt; ẩn dot khi tia laser không chạm vào đâu.
    }
}

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

Tự luyện tập: Playground Unity