Ở cấp độ cơ bản nhất, chiếu tia là hành động gửi ra một tia vô hình từ một điểm Vector3 theo một hướng cụ thể với một chiều dài xác định. Khi tia đã được phát, bạn có thể phát hiện xem tia có va chạm với một BasePart hoặc ô Terrain hay không.
Bạn có thể phát một tia với phương thức WorldRoot:Raycast() (Workspace:Raycast()) từ một nguồn Vector3 theo một hướng Vector3.
Chiếu tia cơ bảnlocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Khi có thể, bạn có thể tính toán một vector hướng không xác định (rayDirection) sử dụng một nguồn và đích đã biết. Điều này rất hữu ích khi phát một tia giữa hai điểm có thể thay đổi, chẳng hạn như từ một nhân vật người chơi sang nhân vật khác.
Nguồn cộng với một vector hướng chỉ ra đích của tia:
Trừ từ cả hai phía của phương trình:
Hướng của tia bằng đích trừ nguồn:
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Tùy chọn lọc
WorldRoot:Raycast() chấp nhận một đối tượng tùy chọn RaycastParams cho biết raycast có chọn lọc bao gồm hoặc loại trừ các BaseParts nhất định, bỏ qua vật liệu Nước cho Terrain, hoặc sử dụng một nhóm va chạm.
| Khóa | Mô tả |
|---|---|
| FilterDescendantsInstances | Mảng các đối tượng mà các phần tử con của chúng được sử dụng để lọc các ứng cử viên chiếu tia. |
| FilterType | Enum RaycastFilterType xác định cách mà mảng FilterDescendantsInstances được sử dụng trong quá trình chiếu tia. |
| IgnoreWater | Boolean xác định liệu vật liệu Nước có được xem xét khi chiếu tia vào Terrain hay không. |
| CollisionGroup | Tên chuỗi của nhóm va chạm được sử dụng cho hoạt động chiếu tia. |
Lọc chiếu tialocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastParams = RaycastParams.new()raycastParams.FilterDescendantsInstances = {script.Parent}raycastParams.FilterType = Enum.RaycastFilterType.ExcluderaycastParams.IgnoreWater = truelocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection, raycastParams)
Phát hiện va chạm
Nếu hoạt động chiếu tia va chạm với một BasePart hoặc ô Terrain đủ điều kiện, một đối tượng RaycastResult sẽ được trả về chứa các kết quả. Để kiểm tra một va chạm, xác nhận rằng kết quả không phải là nil và sử dụng các thuộc tính sau khi cần.
| Thuộc tính | Mô tả |
|---|---|
| Instance | Đối tượng BasePart hoặc ô Terrain mà tia đã giao nhau. |
| Position | Vị trí Vector3 của điểm giao nhau giữa tia và Instance. |
| Distance | Khoảng cách giữa nguồn tia và điểm giao nhau. |
| Material | Vật liệu Enum.Material của BasePart hoặc Terrain tại điểm giao nhau. |
| Normal | Vector3 Vector3 của vector pháp phương của mặt giao nhau. |
Phát hiện va chạm của chiếu tialocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("Không có kết quả chiếu tia!")end