가장 기본적인 수준에서, 레이캐스팅은 특정 방향으로 정의된 길이를 가진 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)를 계산할 수 있습니다. 이는 한 플레이어 캐릭터에서 다른 플레이어 캐릭터로 레이를 발사하는 등의 두 개의 점 간에 레이를 발사할 때 유용합니다.
원점에 방향 벡터를 더한 값이 레이의 목적지를 나타냅니다:
방정식의 양쪽에서 을 빼세요:
레이의 방향은 목적지에서 원점을 뺀 값입니다:
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
필터 옵션
WorldRoot:Raycast()는 레이캐스트가 특정 BaseParts를 포함하거나 제외하도록 지시하는 선택적 RaycastParams 객체를 허용하며, Terrain에 대한 물 재질을 무시하거나 충돌 그룹을 사용할 수 있습니다.
| 키 | 설명 |
|---|---|
| FilterDescendantsInstances | 레이캐스팅 후보 필터링에 사용되는 객체의 Array입니다. |
| FilterType | 레이캐스트 작업에서 FilterDescendantsInstances 배열이 어떻게 사용되는지를 결정하는 Enum.RaycastFilterType 열거형입니다. |
| 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("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("레이캐스트 결과가 없습니다!")end