Chiếu tia

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Ở 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.

Các tia laser được bắn ra từ những quả cầu lơ lửng, và chiếu tia xác định liệu một tia laser có chạm vào một nền tảng hay không. Các nền tảng bị chạm bởi các tia laser sẽ bị hủy bỏ tạm thời.

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ản

local 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đí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.

  1. Nguồn cộng với một vector hướng chỉ ra đích của tia:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. Trừ rayOrigin\text{rayOrigin} từ cả hai phía của phương trình:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. Hướng của tia bằng đích trừ nguồn:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


local Workspace = game:GetService("Workspace")
local rayOrigin = Workspace.TestOrigin.Position
local rayDestination = Workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local 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óaMô tả
FilterDescendantsInstancesMả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.
FilterTypeEnum RaycastFilterType xác định cách mà mảng FilterDescendantsInstances được sử dụng trong quá trình chiếu tia.
  • Exclude — Mỗi BasePart được xem xét trừ những đối tượng là phần tử con của các đối tượng trong mảng.
  • Include — Chỉ những BaseParts là phần tử con của các đối tượng trong mảng mới được xem xét.
IgnoreWaterBoolean 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.
CollisionGroupTê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 tia

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {script.Parent}
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.IgnoreWater = true
local 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ínhMô tả
InstanceĐối tượng BasePart hoặc ô Terrain mà tia đã giao nhau.
PositionVị trí Vector3 của điểm giao nhau giữa tia và Instance.
DistanceKhoảng cách giữa nguồn tia và điểm giao nhau.
MaterialVật liệu Enum.Material của BasePart hoặc Terrain tại điểm giao nhau.
NormalVector3 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 tia

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
if raycastResult then
print("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("Không có kết quả chiếu tia!")
end
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.