회전하는 객체는 3D 공간 내에서 하나 이상의 축을 중심으로 회전하는 객체입니다. Roblox의 시뮬레이션 엔진의 내장 기능을 사용하여 객체가 회전하고 환경과 상호작용하여 중력, 공기역학 및 마찰과 같은 실제 물리적 행동을 모방할 수 있습니다. 이는 플레이어에게 친숙하고 직관적입니다.
회전하는 객체 .rbxl 파일을 참조하여 이 튜토리얼에서는 물리적 힘이 스튜디오에서 각운동에 미치는 영향을 설명하고, 다양한 회전 행동을 가진 객체를 게임에서 회전시키는 여러 기술을 보여줍니다. 여기에는 다음과 같은 내용이 포함됩니다:
- 전체 조립체를 일정한 각속도로 회전시키기 위해 AngularVelocity 이동 제약 조건을 사용하는 방법.
- 조립체 내에서 나머지 조립체가 정지 상태를 유지하는 동안 부품을 일정한 각속도로 회전시키기 위해 HingeConstraint 기계적 제약 조건을 사용하는 방법.
- 조립체를 초기 각 힘의 충격으로 회전시키기 위해 ApplyAngularImpulse 메서드를 사용하는 방법으로, 조립체가 시간이 지남에 따라 서서히 감속하도록 합니다.
각운동과 물리적 힘
Roblox Studio는 실제 행동을 실시간으로 모방하는 실제 세계 시뮬레이션 엔진이므로, 게임에서 회전하는 객체의 행동을 예측하기 위해서는 각운동으로 객체가 실제로 어떻게 회전하는지에 대한 높은 수준의 이해가 중요합니다.
각운동 또는 회전 운동은 고정된 점이나 축을 중심으로 한 움직임입니다. 예를 들어, 프로펠러가 각운동을 할 때, 프로펠러의 회전 축을 중심으로 회전합니다.

각운동은 객체를 회전시키기 위해 외부의 물리적 힘이 필요합니다. 뉴턴의 운동 제1법칙에 따르면, 정지한 객체는 정지 상태를 유지하고, 움직이는 객체는 외부 힘이 작용하지 않는 한 일정한 속도로 계속 움직입니다. 예를 들어, 정지한 프로펠러는 바람과 같은 물리적 힘이 작용하지 않으면 정지 상태를 유지합니다.
토크는 객체를 회전시키는 물리적 힘의 척도이며, 객체가 각가속도를 얻는 데 책임이 있습니다. 이 개념은 스튜디오에서 객체가 회전하는 데 특히 중요합니다. 객체에 적용하는 토크가 많을수록 더 빨리 가속할 수 있습니다.
이는 토크가 중력이나 마찰과 같은 객체에 반대하는 방향의 물리적 힘보다 커야 하기 때문입니다. 예를 들어, 프로펠러를 흙에 놓으면 바람의 물리적 힘이 흙의 마찰을 극복해야 회전하는 프로펠러를 계속 가속할 수 있습니다. 바람의 힘이 흙의 마찰보다 크지 않으면 프로펠러는 가속하지만, 이전 예보다 더 느리게 가속합니다.

각속도는 객체의 회전 속도를 측정하는 척도로, 객체가 고정된 점이나 축을 중심으로 일정 시간 동안 얼마나 빨리 회전하는지를 나타냅니다. 스튜디오는 객체가 초당 몇 라디안 회전하는지를 기준으로 각속도를 측정합니다. 한 회전에는 2π 라디안(6.283)이 있으므로, 객체가 초당 한 바퀴를 회전하려면 약 6 라디안을 회전할 수 있는 충분한 토크가 필요합니다. 각속도를 이해하는 것은 게임에서의 게임플레이 설계에 중요합니다. 이는 회전하는 객체에 대해 특정 가속도를 달성하기 위해 필요한 토크의 양을 결정하는 데 도움이 됩니다.
다음 섹션에서는 이러한 개념을 더 깊이 파고들며, 환경 내의 반대 물리적 힘을 극복하는 데 필요한 토크와 함께 일정한 각속도 또는 초기 각속도로 객체를 회전시키는 방법을 배웁니다. 이러한 물리 개념을 다가오는 기술과 함께 검토하면서, 스튜디오에서 이상적인 회전 행동을 달성하기 위해 속성 값을 조정하는 방법을 보다 정확하게 예측할 수 있습니다.
일정한 각 힘 유지
객체가 일정한 각속도에 도달하고 이를 유지하려면, 객체의 각속도를 감속시키거나 정지 상태를 유지하게 하는 반대 물리적 힘을 극복할 수 있는 각 힘이 필요합니다. 예를 들어, 스튜디오에서 객체가 [0, 12, 0]의 각속도를 가지도록 하려면, 객체가 환경에서 Y축을 따라 초당 12 라디안에 도달하고 이를 유지할 수 있도록 충분한 토크가 필요합니다. 이는 약 두 번의 완전한 회전입니다.
객체에 적용하는 토크의 양은 환경 내의 반대 물리적 힘(예: 중력 및 마찰)뿐만 아니라 객체 자체에도 의존합니다. 예를 들어, 동일한 축을 중심으로 회전하는 동일한 모양의 두 객체가 있을 때, 더 큰 객체는 더 큰 관성 모멘트를 가지므로 동일한 각가속도를 달성하기 위해 더 많은 토크가 필요합니다.
다음 하위 섹션에서는 다양한 모양과 크기의 조립체를 사용하여 전체 객체를 회전시키거나 객체의 일부만 회전시키는 방법을 가르칩니다. 다양한 속성 값을 실험하면서, 자신의 게임에서 조립체에 필요한 최대 토크를 추정하는 방법을 배우게 됩니다.
AngularVelocity 제약 조건 사용
AngularVelocity 객체는 전체 조립체에 토크를 적용하여 일정한 각속도를 유지하는 이동 제약 조건의 일종입니다. 조립체를 회전시키기 시작하려면 AngularVelocity 제약 조건이 다음을 알아야 합니다:
- 각 힘을 적용할 점과 방향(양수 또는 음수).
- 조립체가 초당 회전할 라디안의 양.
- 조립체가 일정한 각속도에 도달하기 위해 엔진이 적용할 수 있는 최대 토크의 양.
이 과정을 시연하기 위해, 작업 공간에 블록을 추가하고, AngularVelocity 제약 조건이 참조하는 부착물을 추가하여 블록을 세계의 Y축을 따라 초당 6 라디안으로 일정한 각속도로 회전시킵니다. 이는 약 한 번의 완전한 회전입니다.

부착물 추가
조립체를 회전시키기 위해 고정된 점을 지정하려면 Attachment 객체를 조립체에 추가한 다음, 3D 공간에서 부착물의 위치를 구성합니다. 샘플 회전하는 객체 게임은 블록 부품의 중앙에 부착물을 배치하여 제약 조건이 부품을 중심으로 반시계 방향으로 회전시킬 수 있도록 합니다.
부착물에는 회전 축을 시각화하는 데 도움이 되는 시각적 도구가 포함되어 있습니다. 노란색 화살표는 부착물의 주요 축을 나타내고, 주황색 화살표는 부착물의 보조 축을 나타냅니다. 이 기술의 단계에서는 회전 축이 블록의 회전에 영향을 미치지 않지만, 이러한 시각적 도구를 이해하는 것은 향후 참조에 중요합니다. 이는 다음 기술에서 HingeConstraint와 같은 다양한 제약 조건에 대한 이상적인 행동을 결정하는 데 도움이 될 수 있습니다.

부착물을 추가하려면:
탐색기 창에서 블록 부품을 작업 공간에 삽입합니다.

새 부품에 부착물을 삽입합니다.
- 탐색기 창에서 부품 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
- 메뉴에서 부착물을 삽입합니다. 부착물이 부품의 중앙에 표시됩니다.
- 부착물의 이름을 SpinAttachment로 변경합니다.

제약 조건 구성
이제 블록에 회전할 고정된 점이 있으므로, AngularVelocity 제약 조건의 속성을 구성하여 회전 방향, 목표 일정한 각속도를 적용할 축, 블록이 초당 회전할 라디안의 양, 블록이 일정한 각속도에 도달하기 위해 엔진이 적용할 수 있는 최대 토크의 양을 지정할 수 있습니다.
샘플 회전하는 객체 게임은 블록을 세계의 Y축을 따라 초당 6 라디안으로 회전시키기 위해 최대 1000 Rowton-studs의 일정한 각 힘을 적용합니다. Rowton-studs는 토크를 측정하기 위한 Roblox의 기본 물리 단위입니다. Roblox 물리 단위와 메트릭 단위로의 변환 방법에 대한 참조는 Roblox 단위를 참조하세요.
AngularVelocity 제약 조건을 구성하려면:
제약 조건의 회전 방향을 참조할 수 있도록 뷰포트에서 제약 조건을 표시하려면 스튜디오의 보기 메뉴에서 제약 조건 세부정보 표시를 활성화합니다.
부품에 AngularVelocity 제약 조건을 삽입합니다.
- 탐색기 창에서 부품 위에 마우스를 올리고 ⊕ 아이콘을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
- 컨텍스트 메뉴에서 AngularVelocity를 삽입합니다. 제약 조건의 시각적 도구가 부품의 중앙에 표시됩니다.
부품의 부착물을 새 제약 조건에 할당합니다.
- 탐색기 창에서 제약 조건을 선택합니다.
- 속성 창에서,
- Attachment0를 SpinAttachment로 설정합니다.
- AngularVelocity를 0, 6, 0으로 설정하여 부품이 Y축을 따라 초당 6 라디안으로 회전하도록 합니다. 이 속성을 0, -6, 0으로 설정하면 블록이 시계 방향으로 회전합니다.
- MaxTorque를 1000으로 설정하여 목표 각속도를 달성하기 위해 초당 최대 1000 Rowton-studs의 일정한 각 힘을 적용합니다.
- RelativeTo를 World로 유지하여 블록이 세계의 위치와 방향에 상대적으로 회전하도록 합니다.

설정한 토크의 양이 블록을 세계의 Y축을 따라 초당 6 라디안으로 회전시키는지 확인합니다.
메자닌의 드롭다운 메뉴에서 실행 시뮬레이션 모드를 선택하고 재생 버튼을 클릭하여 시작합니다. 스튜디오는 현재 카메라 위치에서 아바타 없이 3D 공간에서 게임을 시뮬레이션합니다.

블록의 크기와 환경 내의 반대 물리적 힘에 따라 토크를 조정해야 할 수도 있습니다. 예를 들어, 샘플 게임의 AngularVelocity 제약 조건의 속성은 기본 크기가 4, 1, 2인 블록 부품과 플라스틱 재질의 평면 플랫폼, 그리고 클래식 프리셋 중력을 가진 환경에서 작동합니다.
그러나 블록이 더 큰 크기이고 잔디 지형에 있다면, 각 힘이 블록의 질량과 환경의 마찰을 극복해야 하므로 AngularVelocity.MaxTorque 속성을 증가시켜야 합니다. 예를 들어, 샘플의 부품 크기의 4배인 큰 블록 부품은 설정된 각속도를 달성하기 위해 최소 300000 Rowton-studs의 일정한 각 힘이 필요합니다!
HingeConstraint 제약 조건 사용
HingeConstraint 객체는 두 개의 부착물이 하나의 축을 중심으로 회전할 수 있도록 하여 부착물이 동일한 위치에 고정되고 주요 축이 동일한 방향으로 제약되는 기계적 제약 조건의 일종입니다. HingeConstraint.ActuatorType을 모터로 설정하면 이 제약 조건은 두 부착물에 토크를 적용하여 부착물이 일정한 각속도에 도달하고 이를 유지하도록 합니다.
또한, 두 개의 객체가 있는 조립체에 부착물을 배치하면 객체가 서로 잠겨 함께 회전하려고 시도합니다. 이때 부착물의 고정된 주요 축에 따라 회전합니다. 이러한 객체 중 하나를 고정하면, 각 힘이 나머지 조립체가 정지 상태를 유지하는 동안 다른 객체를 일정한 각속도로 회전시킵니다.
예를 들어, 조립체 내의 특정 객체를 회전시키기 시작하려면 HingeConstraint 제약 조건이 다음을 알아야 합니다:
- 부착물이 겹치는 위치.
- 각 힘을 적용할 점과 방향(양수 또는 음수).
- 부착물이 초당 회전할 라디안의 양.
- 부착물이 일정한 각속도에 도달하기 위해 엔진이 적용할 수 있는 최대 토크의 양.
이 과정을 시연하기 위해, 작업 공간에 두 개의 객체가 있는 프로펠러 조립체를 추가하고, 두 객체 모두에 부착물이 있어 HingeConstraint 제약 조건이 참조하여 프로펠러를 Y축을 따라 초당 3 라디안(약 초당 반 바퀴)으로 일정한 각속도로 회전시키는 방법을 보여줍니다. 이때 프로펠러의 바닥은 정지 상태를 유지합니다.

프로펠러 자산 가져오기
크리에이터 스토어는 프로젝트 내에서 사용할 수 있는 모델, 이미지, 메쉬, 오디오, 플러그인, 비디오 및 글꼴 자산을 포함하여 Roblox와 Roblox 커뮤니티에서 만든 모든 자산을 찾는 데 사용할 수 있는 툴박스의 탭입니다. 크리에이터 스토어를 사용하여 개별 자산이나 자산 라이브러리를 열려 있는 게임에 직접 추가할 수 있습니다.
이 튜토리얼에서는 HingeConstraint 기술의 각속도를 회전시키는 각 단계를 복제할 때 사용할 수 있는 프로펠러 모델을 참조합니다. 이 프로펠러 자산을 인벤토리에서 게임으로 가져오려면:
프로펠러를 인벤토리에 추가합니다.
- 크리에이터 스토어의 자산 세부정보 페이지로 이동합니다.
- 오른쪽 상단 모서리에서 모델 가져오기 버튼을 클릭합니다. 이제 프로펠러 자산이 인벤토리에 추가되었으며, 플랫폼의 모든 프로젝트에서 재사용할 수 있습니다.
스튜디오에서 홈 탭으로 이동한 다음 툴박스 버튼을 클릭합니다. 툴박스 창이 열립니다.

툴박스 창에서 인벤토리 탭을 클릭합니다. 내 모델 정렬이 표시됩니다.

프로펠러 타일을 클릭합니다. 모델이 뷰포트에 표시됩니다.

부착물 구성
조립체 내의 특정 객체를 회전시키기 위해 부착물이 겹치는 위치와 회전 운동의 방향을 지정하려면 두 개의 Attachment 객체를 조립체에 추가한 다음, 3D 공간에서 정렬 및 방향을 구성합니다.
샘플 회전하는 객체 게임은 고정되지 않은 프로펠러가 고정된 바닥과 겹치는 위치 근처에 두 개의 부착물을 정렬하고, 이들이 반시계 방향으로 회전하도록 주요 회전 축을 위쪽으로 향하게 합니다. 이 예제에서는 바닥 부착물이 고정되어 있기 때문에 회전할 수 없습니다.
힌지 제약 조건을 위한 부착물을 구성하려면:
Head와 Base에 Attachment 객체를 삽입합니다.
- 탐색기 창에서 Head 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
- 메뉴에서 부착물을 삽입합니다.
- Base에 대해서도 이 과정을 반복합니다.
- 두 부착물의 이름을 각각 HeadAttachment와 BaseAttachment로 변경합니다.

HeadAttachment와 BaseAttachment를 회전시켜 각 부착물의 주요 축이 Y축을 따라 위쪽을 향하도록 합니다. 이는 스튜디오에 부착물을 반시계 방향으로 회전하도록 지시합니다.

BaseAttachment를 Base의 상단으로 이동하고, HeadAttachment를 Propeller의 하단 가장자리로 이동합니다. 이는 스튜디오에 힌지를 연결할 위치를 알려주고, 런타임 중 두 부착물이 겹치도록 합니다.

제약 조건 구성
이제 부착물이 겹치는 위치와 회전 운동의 방향이 있으므로, HingeConstraint 제약 조건의 속성을 구성하여 부착물이 초당 회전할 라디안의 양과 부착물이 일정한 각속도에 도달하기 위해 엔진이 적용할 수 있는 최대 토크의 양을 지정할 수 있습니다.
이전 기술과 유사하게, 샘플 회전하는 객체 게임은 부착물을 Y축을 따라 초당 3 라디안으로 회전시키기 위해 최대 1000 Rowton-studs의 일정한 각 힘을 적용합니다. 그러나 바닥 부착물이 고정된 객체에 있기 때문에 프로펠러의 부착물만 회전할 수 있습니다.
힌지 제약 조건을 구성하려면:
Head에 HingeConstraint 객체를 삽입합니다.
- 탐색기 창에서 Head 위에 마우스를 올리고 ⊕ 아이콘을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
- 컨텍스트 메뉴에서 HingeConstraint를 삽입합니다.
프로펠러의 부착물을 새 제약 조건에 할당하여 프로펠러가 고정된 바닥에 상대적으로 회전하도록 합니다.
- 탐색기 창에서 제약 조건을 선택합니다.
- 속성 창에서,
- Attachment0를 BaseAttachment로 설정합니다.
- Attachment1을 HeadAttachment로 설정합니다. 힌지가 뷰포트에 표시됩니다.

탐색기 창에서 제약 조건을 선택한 다음, 속성 창에서,
- ActuatorType을 Motor로 설정합니다. 새로운 속성 필드가 표시됩니다.
- MotorMaxTorque를 1000으로 설정하여 목표 각속도를 달성하기 위해 최대 1000 Rowton-studs의 일정한 각 힘을 적용합니다.
- AngularVelocity를 3으로 설정하여 프로펠러의 머리를 초당 3 라디안으로 회전시킵니다.

설정한 토크의 양이 프로펠러를 Y축을 따라 초당 3 라디안으로 회전시키는지 확인합니다.
메자닌의 드롭다운 메뉴에서 실행 시뮬레이션 모드를 선택하고 재생 버튼을 클릭하여 시작합니다. 스튜디오는 현재 카메라 위치에서 아바타 없이 3D 공간에서 게임을 시뮬레이션합니다.

초기 각 힘 적용
객체의 각속도를 변경하는 또 다른 방법은 각 힘의 충격을 적용하는 것입니다. 각 힘의 충격 후, 객체는 마찰과 같은 반대 힘이 있으면 정지할 때까지 감속하거나, 반대 힘이 없으면 일정한 속도로 계속 움직입니다.
이 기술은 강한 바람과 같은 중요한 게임플레이 또는 날씨 이벤트 후에 객체를 회전시키는 데 유용합니다. 이는 플레이어에게 즉각적인 피드백을 제공합니다. 이 과정을 시연하기 위해, 다음 하위 섹션에서는 초기 무작위 각 힘으로 조립체를 회전시키는 방법을 가르치며, 이를 통해 자신의 게임 요구 사항에 맞게 새로운 값으로 조정할 수 있습니다.
ApplyAngularImpulse 사용
ApplyAngularImpulse 메서드는 전체 조립체에 토크를 적용하여 초기 각속도를 얻은 후 정지하도록 합니다. 조립체를 회전시키기 시작하려면, 메서드는 다음을 알아야 합니다:
- 회전시킬 조립체.
- 초기 각속도에 도달하기 위해 토크를 적용할 축.
- 각 축에 적용할 토크의 양.
이 모든 값을 스크립트에서 정의할 수 있습니다. 예를 들어, 샘플 스크립트는 회전시킬 조립체를 스크립트의 부모로 정의한 다음, Y축에 대해 0에서 100 Rowton-studs 사이의 무작위 각 힘의 충격을 적용합니다.
ApplyAngularImpulse를 사용하여 조립체를 회전시키려면:
구 부품을 작업 공간에 삽입합니다. 샘플에서는 구가 MaterialVariant를 사용하여 구의 움직임을 명확하게 시각화할 수 있습니다.

새 부품에 스크립트를 삽입합니다.
- 탐색기 창에서 부품 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
- 메뉴에서 스크립트를 삽입합니다.
기본 코드를 다음 코드로 교체합니다:
local part = script.Parent
local impulse = Vector3.new(0, math.random(0, 100), 0)
part:ApplyAngularImpulse(impulse)