最も基本的なレベルでは、 レイキャスト は、定義された長さの Vector3 ポイントから特定の方向に見えないレイを送信する行為です。キャストすると、レイが BasePart または Terrain セルにヒットしたかどうかを検出できます。
You can cast a ray with the WorldRoot:Raycast() メソッド ( Workspace:Raycast() ) from a Vector3 原点 in a 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)
適用可能な場合、既知の 出典 と 目的地 を使用して、不明な方向ベクトルを計算できます( )。これは、1人のプレイヤーキャラクターから別のものに変更できる 2つのポイント間のレイをキャストするときに便利です。
起源と方向向きベクトルは、レイの目的地を示します:
rayOrigin + rayDirection = rayDestination
方程式の両側から rayOrigin を差し引く:
rayOrigin + rayDirection − rayOrigin = rayDestination − rayOrigin
レイの方向は、目的地から原点を減じたものと同じです:
レイ方向 = レイ目的地 - レイ起源
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
フィルタオプション
は、レイキャストに特定の を選択的に含めるか排除するように指示するオプションの オブジェクトを受け入れ、 水 素材を無視したり、 コライドグループ を使用したりします。
キー | 説明 |
---|---|
FilterDescendantsInstances | Array オブジェクトの子孫がフィルタリングレイキャスト候補に使用されるオブジェクトのうち |
FilterType | Enum.RaycastFilterType 列挙体は、FilterDescendantsInstances 配列がレイキャスト操作で使用される方法を決定します。
|
IgnoreWater | Boolean は、 水 素材をレイキャストするときに考慮されるかどうかを決定します。 |
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 | Vector3 レイと Instance の交点の位置。 |
Distance | レイの起源と交差点の間の距離。 |
Material | 交差点での Enum.Material または BasePart または Terrain の 。 |
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("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("No raycast result!")end