레이캐스팅

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

가장 기본적인 수준에서, 레이캐스팅은 특정 방향으로 정의된 길이를 가진 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)를 계산할 수 있습니다. 이는 한 플레이어 캐릭터에서 다른 플레이어 캐릭터로 레이를 발사하는 등의 두 개의 점 간에 레이를 발사할 때 유용합니다.

  1. 원점에 방향 벡터를 더한 값이 레이의 목적지를 나타냅니다:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. 방정식의 양쪽에서 rayOrigin\text{rayOrigin}을 빼세요:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. 레이의 방향은 목적지에서 원점을 뺀 값입니다:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


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()는 레이캐스트가 특정 BaseParts를 포함하거나 제외하도록 지시하는 선택적 RaycastParams 객체를 허용하며, Terrain에 대한 재질을 무시하거나 충돌 그룹을 사용할 수 있습니다.

설명
FilterDescendantsInstances레이캐스팅 후보 필터링에 사용되는 객체의 Array입니다.
FilterType레이캐스트 작업에서 FilterDescendantsInstances 배열이 어떻게 사용되는지를 결정하는 Enum.RaycastFilterType 열거형입니다.
  • Exclude — 배열의 객체의 자손을 제외한 모든 BasePart가 고려됩니다.
  • Include — 배열의 객체의 자손인 BaseParts만 고려됩니다.
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 또는 TerrainEnum.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("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("레이캐스트 결과가 없습니다!")
end
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.