Datatype.CFrame, 3D 개체를 회전하고 위치하는 데 사용되는 데이터 형식입니다. 개체 속성이나 독립형 단위로 사용되는 데이터 형식은 모두 회전 데이터를 포함하는 글로벌 x-, y-
게임에서 CFrame 응용 프로그램의 일부 예는 다음과 같습니다.
- 레이저 블래스터로 표적하는 적의 위치와 같은 원거리 표적 지점을 찾는 프로젝트 일부.
- 플레이어가 상호 작용하는 특정 NPC에 초점을 맞춘 카메라를 이동합니다.
- 플레이어의 머리 위에 직접 상태 표시기를 배치하여 마비, 부스트, 독 등을 표시합니다.
CFrame 기초
CFrame 위치 지정
Datatype.CFrame.new() 를 사용하여 기본 위치의 (0, 0, 0)에 빈 Datatype.C
local redBlock = workspace.RedBlock-- 새 CFrame 생성local newCFrame = CFrame.new(-2, 2, 4)-- 새로운 CFrame으로 redBlock의 현재 CFrame을 덮어씁니다.redBlock.CFrame = newCFrame
또한, 새로운 Vector3 위치를 제공하여 CFrame.new() 에 동일한 결과를 달성할 수 있습니다.
local redBlock = workspace.RedBlock-- 새 CFrame 생성local newVector3 = Vector3.new(-2, 2, 4)local newCFrame = CFrame.new(newVector3)-- 새로운 CFrame으로 redBlock의 현재 CFrame을 덮어씁니다.redBlock.CFrame = newCFrame
CFrame 회전
를 만들려면 CFrame 생성기를 사용하여 원하는 축에 대한 회전 각도를 라디언으로 제공합니다. CFrame.Angles() 매개 변수
local redBlock = workspace.RedBlock-- 새로운 회전 CFrame 생성local newCFrame = CFrame.Angles(0, math.rad(45), 0)-- 새로운 CFrame으로 redBlock의 현재 CFrame을 덮어씁니다.redBlock.CFrame = newCFrame
포인트 방향으로 향하여
Datatype.CFrame.new()를 사용하여 세계의 특정 위치에 있는 CFrame의 앞면을 가리킬 수 있습니다. 다음 예에서, redBlock 부품은 (0, 3, 0)에 대한 위치를 가지고 있으며, 화이트 서클
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- 시작 위치와 대상 위치 모두에 대한 Vector3 생성local startPosition = Vector3.new(0, 3, 0)local targetPosition = blueCube.Position-- 빨간색 블록을 '시작 위치'에 두고 앞면을 '대상 위치'에 표시합니다.redBlock.CFrame = CFrame.new(startPosition, targetPosition)
CFrame 끄기
To offset an object by a specific number of studs from its current position, add or subtract a Vector3 to or from a new CFrame at the object's position. To get a properly-formatted
local redBlock = workspace.RedBlockredBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
동일한 기술을 사용하여 개체를 다른 개체의 위치에서 오프셋할 수 있습니다. 다음 예에서, Vector3는 블록의 위치 대신 새로운 CFrame를 생성합니다.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCuberedBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
동적 CFrame 지향
Datatype.CFrame.new() 및 CFrame.Angles() 생성자는 세계 내에서 특정 방향으로 개체를 이동하거나 회전하지만, 고정된 세계 위치 및 회전 각도를 사용할 수는 없습니다. 예를 들어,
- 세계의 어느 곳에 있든 플로팅 보물을 플레이어 앞에 배치하는 것. 어느 방향으로든 향할 수 있습니다.
- 마법 요정을 플레이어의 오른쪽 어깨 위에 직접 나타내는 방법.
이 경우 CFrame 메서드를 사용하는 대신 생성자를 사용하지 마십시오.
상대 위치
Datatype.CFrame:ToWorldSpace() 함수는 개체의 CFrame 를 새로운 세계 지향으로 변환하지만, 자체 지향을 존중합니다. 이렇게 하면 부품이 현재 위치/회전하는 방식에 관계없이 다른 세계 지향으로 쉽게 오프셋할 수 있
다음 예에서, redBlock 부품 오프셋은 파란색 큐브의 y축(녹색 화살표가 가리키는 곳)과 글로벌 y축(직선으로 올라가는 것) 사이의 2개의 스터드 오프셋입니다.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCubelocal offsetCFrame = CFrame.new(0, 2, 0)redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
상대 회전
또한 CFrame:ToWorldSpace() 를 사용하여 개체를 자신의 축을 기준으로 회전하십시오. 다음 예에서 볼 수 있듯이 개체의 redBlock 부분이 70도 대신 반시계 방향으로 회전하고 20도 대신 시계 방향으로 회전합니다.
local redBlock = workspace.RedBlocklocal rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
지점을 향해 특정 표면 대면
Datatype.CFrame.new() 의 두 번째 매개 변수로 CFrame.new() 점을 제공하여 개체의 앞면을 다른 개체로 만들 수 있습니다. 또한 상대 회전을 사용하여 개체의 모든 측면을 Vector3 점으로
- 화이트 서클로 표시된 대상에 마크된 앞면 표면을 가리키십시오.
- Datatype.CFrame를 회전하여 검색은 원으로 표시된 상위 표면을 만듭니다.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- 대상 위치에 대한 벡터3 생성local targetPosition = blueCube.Position-- RedBlock의 앞면을 '대상 위치'로 가리키십시오.redBlock.CFrame = CFrame.new(redBlock.Position, targetPosition)-- 이제 빨간색 블록의 앞면(하얀색 원)이 블루큐브를 가리키고 있습니다.-- 빨간색 블록의 CFrame을 자체에 대해 회전하여 상단 표면(앞면이 아님)이 대상을 향하도록 합니다.local rotatedCFrame = CFrame.Angles(math.rad(-90), 0, 0)redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)-- Now the redBlock's top surface (black circle) is pointing towards the blueCube (as seen in After below)
점 간에 찾는 점
Datatype.CFrame 을 두 개의 포인트 사이에 배치하려면 직선 변환 또는 CFrame 를 사용할 수 있습니다. 다음 예에서 볼 수 있듯이 <
local redBlock = workspace.RedBlocklocal greenCube = workspace.GreenCubelocal cyanCube = workspace.CyanCuberedBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)