C프레임

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

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.RedBlock
local 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.RedBlock
redBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
이전에
후에

동일한 기술을 사용하여 개체를 다른 개체의 위치에서 오프셋할 수 있습니다. 다음 예에서, Vector3는 블록의 위치 대신 새로운 CFrame를 생성합니다.


local redBlock = workspace.RedBlock
local blueCube = workspace.BlueCube
redBlock.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.RedBlock
local blueCube = workspace.BlueCube
local offsetCFrame = CFrame.new(0, 2, 0)
redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
이전에
후에

상대 회전

또한 CFrame:ToWorldSpace() 를 사용하여 개체를 자신의 축을 기준으로 회전하십시오. 다음 예에서 볼 수 있듯이 개체의 redBlock 부분이 70도 대신 반시계 방향으로 회전하고 20도 대신 시계 방향으로 회전합니다.


local redBlock = workspace.RedBlock
local rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
이전에
후에

지점을 향해 특정 표면 대면

Datatype.CFrame.new() 의 두 번째 매개 변수로 CFrame.new() 점을 제공하여 개체의 앞면을 다른 개체로 만들 수 있습니다. 또한 상대 회전을 사용하여 개체의 모든 측면을 Vector3 점으로

  1. 화이트 서클로 표시된 대상에 마크된 앞면 표면을 가리키십시오.
  2. Datatype.CFrame를 회전하여 검색은 원으로 표시된 상위 표면을 만듭니다.

local redBlock = workspace.RedBlock
local 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.RedBlock
local greenCube = workspace.GreenCube
local cyanCube = workspace.CyanCube
redBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)
이전에
후에