Phát sóng ánh sáng

*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, phát bắn tia là hành động gửi một tia vô hình từ một điểm Vector3 cụ thể theo một hướng xác định với chiều dài được xác định.Một khi phát sóng, bạn có thể phát hiện xem liệu tia có đánh vào một tế bào BasePart hoặc Terrain hay không.

Laser được bắn bởi các quả cầu nổi và phóng tia xác định xem một laser có đánh trúng một nền tảng hay không.Các nền tảng bị ảnh hưởng bởi laser bị phá hủy tạm thời.

Bạn có thể phát một tia với phương pháp WorldRoot:Raycast() ( Workspace:Raycast() ) từ một nguồn Vector3 ở một hướng Vector3 .

Phát bắn 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 hiện hành, bạn có thể tính toán một vector hướng không xác định ( rayDirection ) bằng cách sử dụng một nguồn gốcđiểm đến đã biết.Điều này hữu ích khi phát ra một tia giữa hai điểm có thể thay đổi, chẳng hạn từ một nhân vật người chơi sang nhau.

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

    tia nguồn + hướng tia = tia đích

  2. Trừ rayOrigin từ cả hai bên của phương trình:

    rayOrigin + rayDirectionrayOrigin = rayDestinationrayOrigin

  3. Hướng của tia bằng với điểm đến trừ nguồn gốc:

    hướng ray = điểm đến raynguồn ray


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)

Lọc các tùy chọn

WorldRoot:Raycast() chấp nhận một đối tượng bắt buộc RaycastParams tùy chọn cho phép raycast lựa chọn bao gồm hoặc loại bỏ một số 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 .

Nhân vật chínhMô tả
FilterDescendantsInstancesArray của các đối tượng mà con cháu của chúng được sử dụng trong việc lọc raycasting ứng viên
FilterTypeEnum.RaycastFilterType enum xác định cách mảng FilterDescendantsInstances được sử dụng trong hoạt động raycast.
  • Exclude — Mỗi BasePart được coi là ngoại trừ những người con của các đối tượng trong mảng.
  • Include — Chỉ BaseParts những thứ con của các đối tượng trong mảng được xem xét.
IgnoreWaterBoolean xác định xem liệu vật liệu Nước có được xem xét khi phát bắn chùm tia chống lại Terrain hay không.
CollisionGroupTên chuỗi của nhóm va chạm được sử dụng cho hoạt động phát bắn tia.
Lọc Raycast

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 trúng

Nếu hoạt động phát tia trúng vào một tế bào hợp lệ BasePart hoặc Terrain, một đối tượng RaycastResult sẽ được trả lại chứa kết quả.Để kiểm tra cho một lần truy cập, 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 theo cần thiết.

Tài sảnMô tả
InstanceTế bào BasePart hoặc Terrain mà tia đã cắt qua.
PositionVector3 vị trí của sự kết hợp giữa tia và Instance .
DistanceKhoảng cách giữa nguồn tia và điểm giao lộ.
MaterialThe Enum.Material of the BasePart hoặc Terrain tại điểm giao lộ.
NormalVector3 của vector bình thường của khuôn mặt bị chồng lấp.
Phát hiện trúng 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("No raycast result!")
end