最も基本的なレベルでは、レイキャスティングは、特定の方向に定義された長さで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.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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.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)
ヒット検出
レイキャスティング操作が適格な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.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("インスタンス:", raycastResult.Instance)print("位置:", raycastResult.Position)print("距離:", raycastResult.Distance)print("マテリアル:", raycastResult.Material)print("法線:", raycastResult.Normal)elsewarn("レイキャスト結果がありません!")end