最も基本的なレベルでは、レイキャスティングは、特定の方向に定義された長さでVector3ポイントから見えないレイを送信する行為です。レイを放つと、BasePartまたはTerrainセルにレイが当たるかどうかを検出できます。
WorldRoot:Raycast()メソッド(Workspace:Raycast())を使用して、Vector3の起点からVector3の方向にレイを放つことができます。
基本的なレイキャスト
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)可能な場合、既知の起点と目的地を使用して未知の方向ベクトル(rayDirection)を計算できます。これは、一方のプレイヤーキャラクターから別のキャラクターへのように、変更可能な2つのポイントの間にレイを放つときに便利です。
起点に方向ベクトルを加えると、レイの目的地を示します:
方程式の両側からを引きます:
レイの方向は目的地から起点を引いたものに等しいです:
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)フィルタオプション
WorldRoot:Raycast()は、オプションのRaycastParamsオブジェクトを受け入れ、レイキャストが特定のBasePartsを選択的に含めるか除外するか、Terrainの水マテリアルを無視するか、衝突グループを使用するよう指示します。
| キー | 説明 |
|---|---|
| FilterDescendantsInstances | レイキャスティングの候補をフィルタリングするために使用されるオブジェクトのArray。 |
| FilterType | Enum.RaycastFilterType列挙型で、レイキャスト操作におけるFilterDescendantsInstances配列の使用方法を決定します。 |
| IgnoreWater | レイキャスティング時にTerrainに対して水マテリアルが考慮されるかどうかを決定するブール値。 |
| CollisionGroup | レイキャスティング操作に使用される衝突グループの文字列名。 |
レイキャストフィルタリング
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)ヒット検出
レイキャスティング操作が適格なBasePartまたはTerrainセルに当たると、結果を含むRaycastResultオブジェクトが返されます。ヒットをテストするには、結果がnilでないことを確認し、必要に応じて以下のプロパティを利用します。
| プロパティ | 説明 |
|---|---|
| Instance | レイが交差したBasePartまたはTerrainセル。 |
| Position | レイとInstanceとの交差点のVector3位置。 |
| Distance | レイの起点と交差点間の距離。 |
| Material | 交差点にあるBasePartまたはTerrainのEnum.Material。 |
| Normal | 交差した面の法線ベクトルのVector3。 |
レイキャストヒット検出
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("インスタンス:", raycastResult.Instance)
print("位置:", raycastResult.Position)
print("距離:", raycastResult.Distance)
print("マテリアル:", raycastResult.Material)
print("法線:", raycastResult.Normal)
else
warn("レイキャスト結果がありません!")
end