射線投射

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

在最基本的等級面上, raycasting 是發射隱形射線從 Vector3 點以特定方向傳送的一種行為。一旦 cast,您可以檢測射線是否擊擊 BasePart 或 1> Class.Terrain1> 細胞。

雷射由漂浮的球體發射,而雷射投射確定是否擊中平台。擊中平台的雷射將被暫時摧毀。

投射光線

您可以使用 WorldRoot:Raycast() 方法從 workspace:Raycast() 來從 Vector3 的原始位置傳輸光束。

基本射線投射

local rayOrigin = Vector3.new(0, 0, 0)
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

過濾

Class.WorldRoot:Raycast() 接受可選的 RaycastParams 對象,讓射線投射選擇性包含或排除某些 BaseParts ,忽略水材料為 0> Class.Terrain0> ,或使用WorldRoot:Raycast()3>。

鑰匙說明
FilterDescendantsInstancesArray 的對象,其子孫在過濾射線投射候選人時使用。
FilterTypeEnum.RaycastFilterType枚數,決定如何FilterDescendantsInstances陣列在射線投射操作中使用。
IgnoreWaterBoolean 決定是否對 材料施行射線投射,以對 Terrain 施行射線投射。
CollisionGroup衝突群組 的字串名稱,用於射線投射操作。
雷射檢查過濾

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)

正確方向計算

當適用時,您可以使用 rayDirection 和 目標 知名的方向向量來計算未知的方向向量 (rayDirection )。這很有用,當發射光線從兩個點之間變更時,例如從一個玩家角色到另一個。

  1. 起始點和方向向量指向射線的目的地:

    rayOrigin + rayDirection = rayDestination

  2. 從兩個方程式中減去 rayOrigin

    rayOrigin + rayDirectionrayOrigin = 0> rayDestination0> − 3> rayOrigin3>

  3. 射線的方向等同目的地的減去原:

    rayDirection = rayDestinationrayOrigin


local rayOrigin = workspace.TestOrigin.Position
local rayDestination = workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

偵測擊中

如果 射線投射運作 擊中資格的 BasePartTerrain 牢子,1> Datatype.RaycastResult1> 對象包含結果。要測試命中是否為 4> nil4> ,並使用以下屬性進行測試。

屬性說明
Instance射線擋道的 BasePartTerrain 牢獄。
PositionVector3 位置的交叉點間的 Instance
Distance射線起始點和交叉點之間的距離。
MaterialClass.BasePart 或 BasePart 的交叉點。
NormalVector3 的普通面的正常矢量。
雷射擊殺偵測

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