이 기본 클래스는 Workspace 및 WorldModel와 같이 3D 공간 쿼리 및 시뮬레이션을 처리하기 위한 모든 인스턴스에 대한 API를 제공합니다.
요약
속성
속성가 Model에서 상속되었습니다인스턴스 스트리밍이 활성화된 경험에 대한 모델의 세부 수준을 설정합니다.
인스턴스 스트리밍이 활성화된 경우 Models에서 모델 스트리밍 행동을 제어합니다.
기본 부분의 Model 또는 nil 명시적으로 설정되지 않은 경우.
편집기에만 사용되는 속성으로, 피벗 주위에 모델을 확장하는 데 사용됩니다. 이 속성을 설정하면 피벗에서 Model/ScaleTo가 호출된 것처럼 규모가 이동됩니다.
어떤 Model 가 가지고 있지 않은 피벗의 위치를 결정합니다. where the pivot of a which does not have a set Model.PrimaryPart 는.
메서드
주어진 BasePart 중 하나라도 다른 부품에 닿으면 진실을 반환합니다.
지정된 방향으로 블록 모양을 던지고 모양이 또는 또는 셀에 타격하면 반환합니다.
부품의 바인딩 상자 가 지정된 상자에 겹치는 배열을 반환합니다.
부품의 바인딩 상자 가 지정된 구체에 겹치는 배열을 반환합니다.
주어진 부품과 공유되는 부품의 공간을 가진 배열을 반환합니다.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
부품을 직접 이동하는 대신 역방향 카메라틱을 통해 지정된 부품을 지정된 위치로 이동하여 부품에 참여하는 모든 관절, 제약 조건 또는 충돌이 물리적으로 만족스럽게 유지되도록 합니다.
원점, 방향 및 선택적 RaycastParams 을 사용하여 광선을 발사하고, 적격 개체 또는 지형이 광선과 교차하면 RaycastResult 을 반환합니다.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
지정된 방향으로 구형 모양을 던지고 모양이 또는 또는 셀에 타격하면 반환합니다.
지정된 시간 증가와 선택적 BaseParts 집합에 따라 세계의 부품에 대한 시뮬레이션을 앞으로 진행합니다.
지정된 플레이어에 대해 이 모델을 영구적으로 유지하도록 설정합니다.Model.ModelStreamingMode 는 추가로 인해 변경된 동작을 위해 PersistentPerPlayer 로 설정해야 합니다.
모델의 모든 부분을 포함하는 볼륨의 설명을 반환합니다.
설정되면 의 모든 것을 포함하는 가장 작은 바인딩 상자의 크기를 반환합니다.Returns the size of the smallest bounding box that contains all of the in the , aligned with the if it is set.
이 모델 개체가 영구적으로 유지하는 모든 Player 개체를 반환합니다.이 메서드가 Script 또는 LocalScript 호출되는지에 따라 동작이 달라집니다.
새로 생성된 모델에 기본값이 1인 모델의 캐논 규모를 반환하며, Model/ScaleTo를 통해 크기가 조정될 때 변경됩니다.
PrimaryPart를 지정된 위치로 이동합니다. 기본 부품이 지정되지 않았으면 모델의 루트 부품이 사용됩니다.
지정된 플레이어에 대해 이 모델을 더 이상 영구적으로 유지하지 않습니다.Model.ModelStreamingMode 는 제거로 인해 변경된 동작을 위해 PersistentPerPlayer 로 설정해야 합니다.
모델의 규모 요소를 설정하여 모든 하위 인스턴스의 크기와 위치를 조정하여 규모 요소가 1일 때 초기 크기와 위치와 관련하여 그 규모 요소가 있도록 합니다.
모델의 방향을 유지하면서 주어진 오프셋 Model에 의해 이동하여 Vector3로 전환합니다.새 위치에 이미 다른 BasePart 또는 Terrain 가 있으면 해당 Model 가 해당 개체를 겹치게 합니다.
PVInstance의 피벗을 가져옵니다.
피벗이 지금 지정된 PVInstance 에 위치하도록 모든 하위 요소 PVInstances 와 함께 변환하여 피벗이 지금 지정된 CFrame 에 위치합니다.
속성
메서드
ArePartsTouchingOthers
ArePartsTouchingOthers 는 지정된 BasePart 중 하나 이상이 다른 부품에 접촉하는 경우 true를 반환합니다.두 부분이 거리 임계값 내에 있으면 "터치"로 간주됩니다, overlapIgnored .
부품이 제공되지 않으면 false가 반환됩니다.
매개 변수
목록에 있는 부품이 목록에 없는 부품에 닿고 있는지 확인하는 부품 검사 목록입니다.
부품이 닿는 것으로 간주되기 전에 무시되는 스터드의 부품 겹치기 임계값.
반환
부품 목록에 없는 다른 부품에 만지는 경우 중 하나라도 있으면 참이고, 부품이 전달되지 않으면 거짓입니다.
코드 샘플
The code block below demonstrates how to use WorldRoot:ArePartsTouchingOthers() to check if parts in a list are touching any parts in the workspace not in the list.
First the script creates two square parts that overlap 1 stud, Part1 and Part2. Then, it prints the value returned by ArePartsTouchingOthers() when Part1 is passed in partList at three different overlap values: 0, 0.999, and 1. The first two times ArePartsTouchingOthers() is called return false because the overlap values are less than the distance that Part1 and Part2 overlap. The third call returns true because the overlap value is equal to the distance that the parts overlap.
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
지정된 방향으로 블록 모양을 던지고 BasePart 또는 Terrain 셀로 첫 번째 충돌을 반환합니다.이는 충돌을 찾기 위해 선형 광선을 방향으로 던지는 방식과 비슷하지만, 레이 대신 3D 모양을 사용합니다.
와 달리, 이 메서드는 처음에 모양이 교차하는 것을 감지하지 않습니다.
히트가 감지되면 RaycastResult 에 히트 정보가 포함된 반환됩니다.Distance 속성은 형태가 히트를 찾기 위해 이동해야 하는 거리를 나타내며, Position 속성은 히트를 일으키는 교차점을 나타냅니다.
이 메서드는 무효한 CFrame , 크기 또는 방향 입력이 전달되면 오류를 발생시킵니다.
매개 변수
캐스트 블록 모양의 초기 위치와 회전.
캐스트 블록 모양의 크기가 스터드 단위입니다. 최대 크기는 512 스터드입니다.
모양 캐스트의 방향, 크기가 모양이 이동할 수 있는 최대 거리를 나타내는 값. 최대 거리는 1024스터드입니다.
반환
코드 샘플
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
이 함수는 기본 속성 BaseParts 이벤트를 발생시키지 않고 테이블의 CFrames 를 Changed 테이블로 이동합니다.이렇게 하면 각 부품에 대한 별도 속성 집합 비용을 지불할 필요가 없으므로 큰 수의 부품을 이동하는 데 매우 빠른 방법을 제공합니다.
세 번째 인수는 이동 작업을 더 최적화할 수 있게 합니다.기본적으로 각 부분의 이벤트 Changed 는 Position , Orientation 및 CFrame 에 대해 발생합니다.그러나 세 번째 인수로 FireCFrameChanged 를 지정하면 속성 CFrame 에 대한 Changed 이벤트만 발생합니다.
부품 이동이 코드에서 병목 상태인지 확신하는 경우에만 이 함수를 사용해야 합니다.단순히 개별 부품 및 접합 모델의 CFrame 속성을 설정하는 것만으로도 대부분의 경우에 충분히 빠릅니다.
매개 변수
반환
GetPartBoundsInBox
는 부품의 경계 상자가 주어진 중심( )과 크기( )를 사용하여 설명되는 상자의 볼륨을 겹치게 하는 배열을 반환합니다.
강조했듯이 이 공간 쿼리 메서드는 실제 점유 용량이 아닌 부품의 바인딩 상자 용량을 효율적으로 고려합니다.실린더, 구, 연합 및 블록이 아닌 모양의 MeshParts 가 고려될 때 중요할 수 있습니다.정확도가 특히 중요한 경우 WorldRoot:GetPartsInPart() 대신 사용하거나 이 메서드의 결과를 직접 필터링하십시오.
이 메서드는 개체를 사용하여 공간 쿼리의 재사용 가능한 부분을 설명하며, 포함 또는 제외 목록, 쿼리에 사용할 최대 부품 수, 충돌 그룹을 사용할지 여부 및 쿼리가 교차된 부분의 값을 선호하는지 여부를 설명합니다.
매개 변수
쿼리할 지정된 상자 볼륨의 중심 위치.
쿼리할 지정된 상자 볼륨의 크기.
공간 쿼리 매개 변수의 재사용 가능한 부분을 포함합니다.
반환
공간 쿼리와 일치하는 BaseParts 배열.
GetPartBoundsInRadius
는 바인딩 상자가 오버랩되는 부품 배열을 반환하며, 이 배열에는 주어진 중심( )과 반경(number)을 사용하여 볼륨이 설명됩니다.
강조했듯이 이 공간 쿼리 메서드는 실제 점유 용량이 아닌 부품의 바인딩 상자 용량을 효율적으로 고려합니다.실린더, 구, 연합 및 블록이 아닌 모양의 MeshParts 가 고려될 때 중요할 수 있습니다.정확도가 특히 중요한 경우 WorldRoot:GetPartsInPart() 대신 사용하거나 이 메서드의 결과를 직접 필터링하십시오.
이 메서드는 개체를 사용하여 공간 쿼리의 재사용 가능한 부분을 설명하며, 포함 또는 제외 목록, 쿼리에 사용할 최대 부품 수, 충돌 그룹을 사용할지 여부 및 쿼리가 교차된 부분의 값을 선호하는지 여부를 설명합니다.
매개 변수
쿼리할 지정된 구체 볼륨의 중심 위치.
쿼리할 지정된 구체 볼륨의 반경.
공간 쿼리 매개 변수의 재사용 가능한 부분을 포함합니다.
반환
공간 쿼리와 일치하는 BaseParts 배열.
GetPartsInPart
WorldRoot:GetPartsInPart()는 주어진 부품과 공유 공간을 가진 부품 배열을 반환합니다(쿼리할 부품이 동일한 WorldRoot에 있어야 함).이 메서드는 BasePart:GetTouchingParts() 대신 사용할 수 있으며 일반적으로 더 나은 선택입니다.
언급했듯이 이 공간 쿼리 메서드는 전체 기하 충돌 확인사용하여 지정된 부품이 차지하는 정확한 용량을 고려합니다.예를 들어, 콘베이스/공극 부품은 실제로 이러한 부품을 겹치거나 터치하지 않는 한 쿼리된 부품과 일치하지 않습니다.간단한 볼륨의 경우 WorldRoot:GetPartBoundsInBox() 또는 WorldRoot:GetPartBoundsInRadius() 을 사용하는 것이 더 정확하지만 더 효율적으로 수행하므로 고려해 보십시오.
이 메서드는 개체를 사용하여 공간 쿼리의 재사용 가능한 부분을 설명하며, 포함 또는 제외 목록, 쿼리에 사용할 최대 부품 수, 충돌 그룹을 사용할지 여부 및 쿼리가 교차된 부분의 값을 선호하는지 여부를 설명합니다.
매개 변수
다른 부품과 비교할 볼륨이 있는 부품.
공간 쿼리 매개 변수의 재사용 가능한 부분을 포함합니다.
반환
공간 쿼리와 일치하는 BaseParts 배열.
IKMoveTo
이 함수는 특정 부품을 직접 이동하는 대신 역학적 역전을 통해 지정된 위치로 이동하여 참여하는 모든 관절이나 충돌이 물리적으로 만족스러운 상태로 유지되도록 합니다.현재 이 함수는 실행 중인 게임의 물리학과 충돌하기 때문에 Studio에서만 사용할 수 있습니다(plugins).
강도 번역 은 0과 1 사이의 숫자로, 부품의 위치를 대상 CFrame의 위치와 얼마나 공격적으로 일치시킬지 지정합니다. 강성 회전 은 0과 1 사이의 숫자로, 부품의 회전을 대상 CFrame의 회전 부분과 얼마나 공격적으로 일치시킬지 지정합니다.
예를 들어:
- 번역 강도와 회전 강도가 모두 1과 같으면 부품이 물리적 제약 조건에 관계없이 목표 CFrame으로 정확하게 이동됩니다.
- 번역 강도와 회전 강도가 둘 다 0.5와 같으면 부품이 정확히 대상 CFrame으로 이동하려고 하지만, 물리적 제약으로 인해 방해받을 수 있습니다.
- 번역 강도와 회전 강도가 둘 다 0과 동일한 경우 대상 CFrame이 무시되고 물리적 제약 조건이 대상의 위치에서 해결됩니다.
매개 변수
이동 중인 부품.
지정된 부품을 이동할 위치.
물리적 해상도로 영향을 받아야 하는 개체를 지정할 수 있습니다.
반환
Raycast
기원, 방향 및 선택적 RaycastParams을 사용하여 광선을 던집니다.적합한 BasePart 또는 Terrain 셀을 찾으면 작업의 결과를 포함하는 RaycastResult 가 반환됩니다.RaycastParams 개체가 제공되지 않으면 기본값이 사용됩니다(모든 부품이 고려되고 Terrain 물은 무시되지 않음).
방향 벡터의 길이(크기)가 중요하다는 점에 유의하십시오, 방향 벡터의 길이보다 멀리 있는 개체/지형은 테스트되지 않을 것입니다.광선 구성 요소를 만드는 데 도움이 되는 CFrame를 사용하는 경우, 아래 예제에서 보여준 것처럼 방향 벡터로 CFrame.LookVector를 사용하고 원하는 길이로 곱하십시오.방향 벡터의 최대 길이는 15,000스터드입니다.
이 메서드는 사용하지 않지만 원본과 방향 구성 요소는 및 에서 빌려올 수 있습니다.
매개 변수
광선의 원점.
레이의 방향 벡터. 이 벡터의 길이가 중요하며, 길이가 더 멀리 있는 부품/지형은 테스트되지 않습니다.
레이캐스트 작업에서 히트 요구 사항을 지정하는 데 사용되는 개체.제공되지 않으면 모든 부품이 고려되고 Terrain 물이 무시되지 않는 기본값이 사용됩니다.
반환
코드 샘플
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
매개 변수
반환
Spherecast
지정된 방향으로 구형 모양을 던지고 BasePart 또는 Terrain 세포로 첫 번째 충돌을 반환합니다.이는 충돌을 찾기 위해 선형 광선을 방향으로 던지는 방식과 비슷하지만, 레이 대신 3D 모양을 사용합니다.
와 달리, 이 메서드는 처음에 모양이 교차하는 것을 감지하지 않습니다.
히트가 감지되면 RaycastResult 에 히트 정보가 포함된 반환됩니다.Distance 속성은 형태가 히트를 찾기 위해 이동해야 하는 거리를 나타내며, Position 속성은 히트를 일으키는 교차점을 나타냅니다.
이 메서드는 유효하지 않은 반경 또는 방향 입력을 전달하면 오류를 발생시킵니다.
매개 변수
캐스트 구형 모양의 초기 위치.
스터드에서 캐스트 구형 모양의 반경. 최대 반경은 256스터드입니다.
모양 캐스트의 방향, 크기가 모양이 이동할 수 있는 최대 거리를 나타내는 값. 최대 거리는 1024스터드입니다.
반환
코드 샘플
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
지정된 시간 증가와 선택적 BasePart 집합에 따라 세계의 부품에 대한 시뮬레이션을 앞으로 진행합니다.부품 세트가 지정되면 이 부품만 시뮬레이션되고 세계의 모든 다른 부품은 고정된 것으로 처리됩니다.이 인수가 생략되면 세계의 모든 부품이 시뮬레이션에 포함됩니다.지정된 시간 증가량은 더 큰 값일수록 함수의 런타임이 증가합니다. The specified time increment can be any positive number, with larger values increasing the runtime of the function.시간 증가량의 값에 따라 물리 시스템은 시뮬레이션의 정확도와 안정성을 유지하기 위해 여러 개의 단일 단계로 분할할 수 있습니다.함수가 여러 단계를 수행하더라도 시뮬레이션의 결과는 함수가 완료되면 한 번만 볼 수 있습니다.시뮬레이션의 개별 단계를 시각화하려면 함수를 RunService.RenderStepped 이벤트를 통해 렌더링 단계당 한 번 호출할 수 있습니다.
매개 변수
시뮬레이션될 시간 수입니다. 이 인수는 양수여야 합니다. 더 큰 값은 이 함수의 런타임을 증가시킵니다.
시뮬레이션될 부품의 선택적 배열. 이 집합에는 유형 BasePart의 인스턴스가 포함되어야 하며, 다른 유형은 무시됩니다.
반환
코드 샘플
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)