Ở 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.
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 và đ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.
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
Trừ rayOrigin từ cả hai bên của phương trình:
rayOrigin + rayDirection − rayOrigin = rayDestination − rayOrigin
Hướng của tia bằng với điểm đến trừ nguồn gốc:
hướng ray = điểm đến ray − nguồn ray
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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ính | Mô tả |
---|---|
FilterDescendantsInstances | Array 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 |
FilterType | Enum.RaycastFilterType enum xác định cách mảng FilterDescendantsInstances được sử dụng trong hoạt động raycast. |
IgnoreWater | Boolean 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. |
CollisionGroup | Tê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.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 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ản | Mô tả |
---|---|
Instance | Tế bào BasePart hoặc Terrain mà tia đã cắt qua. |
Position | Vector3 vị trí của sự kết hợp giữa tia và Instance . |
Distance | Khoảng cách giữa nguồn tia và điểm giao lộ. |
Material | The Enum.Material of the BasePart hoặc Terrain tại điểm giao lộ. |
Normal | Vector3 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.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("No raycast result!")end