움직이는 객체는 3D 공간 내에서 하나 이상의 축을 따라 이동하는 객체입니다. Roblox의 시뮬레이션 엔진의 내장 기능을 사용하여 객체를 이동시키고, 중력, 공기역학 및 마찰과 같은 실제 물리적 행동을 시뮬레이션하면서 플레이어들에게 친숙하고 직관적인 방식으로 환경과 상호작용하도록 만들 수 있습니다.
움직이는 객체 .rbxl 파일을 참조로 하여, 이 튜토리얼은 스튜디오에서 물리적 힘이 선형 운동에 미치는 영향을 설명하고, 다양한 움직임 행동을 통해 경험에서 객체를 A 지점에서 B 지점으로 이동시키는 여러 기술을 보여줍니다. 여기에는 다음과 같은 가이드가 포함됩니다:
- LinearVelocity 이동 제한을 사용하여 전체 어셈블리를 일정한 선형 속도로 이동시키기.
- PrismaticConstraint를 사용하여 어셈블리를 단일 축으로 고정하고 3D 공간의 지점에 대해 일정한 선형 속도로 이동시키기.
- ApplyImpulse 메서드를 사용하여 초기 힘의 충격으로 어셈블리를 이동시켜서 시간이 지남에 따라 서서히 감속하게 하기.
선형 운동과 물리적 힘
Roblox Studio는 실제 물리적 행동을 실시간으로 시뮬레이션하는 엔진이므로, 객체가 선형적으로 이동할 때의 행동을 예측하기 위해서는 객체가 실제로 어떻게 움직이는지를 높은 수준에서 이해하는 것이 중요합니다.
선형 운동은 한 축을 따라의 이동입니다. 예를 들어 블록이 선형 운동을 하고 있다면, 설정된 축을 따라 이동합니다.

선형 운동은 객체가 이동하도록 밀거나 당기는 외부 물리적 힘 없이는 존재할 수 없습니다. 뉴턴의 제1운동 법칙에 따르면, 정지된 객체는 정지 상태를 유지하고, 움직이는 객체는 외부 힘이 작용하지 않는 한 일정한 속도로 움직인다고 합니다. 예를 들어, 정지된 블록은 물리적 힘인 바람에 의해 밀릴 때만 움직입니다.
힘은 객체가 한 축을 따라 선형 속도를 변화시키도록 하는 물리적 푸시나 풀의 방향과 크기를 측정한 것입니다. 속도의 변화는 가속도로 알려져 있습니다. 이 개념은 스튜디오에서 객체를 움직이기 위해 특히 중요합니다. 객체에 더 많은 힘을 가할수록 더 빨리 가속합니다.
이는 적용된 힘이 중력이나 마찰과 같이 객체에 반대하여 작용하는 물리적 힘을 초과해야 하기 때문입니다. 예를 들어 블록을 금속 판 위에 두면 바람의 물리적 힘이 금속 판에서 발생하는 마찰력을 극복해야 블록이 계속 가속할 수 있습니다. 바람의 힘이 금속 판의 마찰보다 크지 않다면 블록은 가속되지만, 앞서의 예보다는 느리게 가속됩니다.

선형 속도는 개체의 이동 측정 또는 개체가 특정 시간 동안 한 축을 따라 위치를 얼마나 빠르게 변경하는지를 나타냅니다. 스튜디오는 객체가 초당 얼마나 많은 스터드를 이동하는지를 기준으로 선형 속도를 측정합니다. 스터드는 길이를 측정하는 Roblox의 주요 물리 단위이며, 스터드 하나는 실제 세계에서 약 28cm에 해당합니다.

선형 속도를 이해하는 것은 경험에서 게임 플레이를 설계하는 데 중요합니다. 이는 이동하는 객체에 특정 속도를 달성하기 위해 필요한 힘의 양을 결정하는 데 도움이 되기 때문입니다. 예를 들어, 객체를 위로 추진하려면 객체가 정확하게 이동할 수 있도록 환경 내에서 중력을 극복하기 위해 힘을 어떻게 조정해야 하는지를 고려하는 것이 중요합니다.
다음 섹션에서는 객체를 일정한 선형 속도나 초기 선형 속도로 이동시키는 방법을 배우면서 이러한 개념을 더욱 깊이 탐구합니다. 물리적 힘이 반대 작용하는 환경 내에서 이를 극복하는 데 필요한 힘을 이해하고 있는 한, 스튜디오 내에서 이상적인 선형 이동 행동을 달성하기 위해 속성 값을 조정하는 방법을 보다 정확하게 예측할 수 있습니다.
일정한 선형 속도 유지하기
객체가 일정한 선형 속도에 도달하고 이를 유지하려면, 객체의 선형 속도를 감소시키거나 객체를 정지 상태로 유지하는 반대 물리적 힘을 극복하기 위한 힘이 필요합니다. 예를 들어, 스튜디오 내에서 객체가 [0, 12, 0]의 선형 속도를 가지도록 하려면, 환경에서 Y 축을 따라 초당 12 스터드를 유지하는 데 충분한 힘을 제공해야 합니다.
필요한 힘의 양은 중력 및 마찰과 같은 환경 내의 반대 물리적 힘뿐만 아니라 객체 자체에 의해서도 달라집니다. 예를 들어, 같은 축에서 이동하는 두 개의 동일한 형태의 객체가 있다면, 더 큰 질량을 가진 객체는 동일한 선형 가속도를 달성하기 위해 더 많은 힘이 필요합니다.
다음 하위 섹션에서는 다양한 모양과 크기의 어셈블리를 사용하여 전체 객체 또는 객체의 일부를 일정한 선형 속도로 이동시키는 방법을 배웁니다. 다양한 속성 값을 실험하면서, 경험 내에서 어셈블리에 필요한 최대 힘의 양을 추정하는 방법을 배우게 됩니다.
LinearVelocity 제한 사용하기
LinearVelocity 객체는 모듈식 제한을 적용하여 전체 어셈블리에 힘을 가해 일정한 선형 속도를 유지합니다. 이동하는 동안 어셈블리의 위치를 축에 고정하지 않으면 어셈블리는 3D 공간의 다른 객체와 충돌할 때 자유롭게 회전할 수 있습니다. 이러한 유형의 이동은 플레이어들이 예측하기 더 어려운 놀라운 게임 플레이 시나리오로 이어집니다.
어셈블리를 이동시키기 시작하려면 LinearVelocity 제한이 알아야 할 사항은 다음과 같습니다:
- 힘을 가할 지점과 긍정적 또는 부정적 방향.
- 어셈블리가 초당 몇 스터드를 이동할 것인지.
- 어셈블리가 일정한 선형 속도에 도달하기 위해 엔진이 적용할 수 있는 최대 힘.
이 과정을 보여주기 위해, 여러분은 세계의 부정적 X 축을 따라 15 스터드 속도로 연꽃 패드를 이동하기 위해 LinearVelocity 제한이 참조하는 어셈블리를 구성을 할 것입니다.

어태치먼트 추가
힘을 가할 지점을 지정하기 위해 어셈블리에 Attachment 객체를 추가하고, 3D 공간 내에서 어태치먼트의 위치를 구성하면 됩니다. 샘플 움직이는 객체 경험은 연꽃 패드의 중앙에 어태치먼트를 배치하여 제한이 메쉬를 특정 축을 따라 이동할 수 있도록 합니다.
어태치먼트는 축의 이동 방향을 시각화하는 데 도움이 되는 시각적 보조 도구를 포함하고 있습니다. 노란색 화살표는 어태치먼트의 기본 축을 나타내고, 주황색 화살표는 어태치먼트의 보조 축을 나타냅니다. 이 단계에서 각 축의 이동 방향이 연꽃 패드의 이동에 영향을 주지는 않지만, 이러한 시각적 보조 도구를 이해하는 것은 향후 참고용으로 중요합니다. 왜냐하면 이들이 PrismaticConstraint와 같은 다양한 유형의 제한에서 이상적인 행동을 결정하는 데 도움이 될 수 있기 때문입니다.

어태치먼트를 추가하려면:
Explorer 창에서 LinearVelocityExample 폴더를 확장한 다음, 그 하위의 LilyPad_DIY 모델을 확장합니다.
Pad 메쉬에 어태치먼트를 삽입합니다.
- 메쉬 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 문맥 메뉴가 표시됩니다.
- 메뉴에서 Attachment를 삽입합니다. 어태치먼트는 부분의 중앙에 표시됩니다.
- 어태치먼트의 이름을 MoveAttachment로 변경합니다.

제한 구성
이제 메쉬가 연꽃 패드를 이동할 고정된 지점을 가지므로, LinearVelocity 제한의 속성을 구성하여 일정한 선형 속도를 위한 방향과 크기, 초당 원하는 스터드 수, 어셈블리가 일정한 선형 속도에 도달하기 위해 엔진이 적용할 수 있는 최대 힘을 지정할 수 있습니다.
샘플 움직이는 객체 경험은 연꽃 패드를 세계의 부정적 X 축을 따라 일정한 선형 속도로 초당 15 스터드 이동시키기 위해 최대 5000 Rowtons의 일정한 힘을 적용합니다. Rowtons는 힘을 측정하기 위한 Roblox의 주요 물리 단위입니다. Roblox의 물리 단위와 미터법 단위로 변환하는 방법은 Roblox 단위를 참조하세요.
LinearVelocity 제한을 구성하려면:
뷰포트에서 제한의 선형 방향을 참조할 수 있도록 Show Constraint Details를 스튜디오의 View 메뉴에서 활성화합니다.
Pad 메쉬에 LinearVelocity 제한을 삽입합니다.
- Explorer 창에서 메쉬 위로 마우스를 가져가고 ⊕ 아이콘을 클릭합니다. 문맥 메뉴가 표시됩니다.
- 문맥 메뉴에서 LinearVelocity를 삽입합니다.
메쉬의 어태치먼트를 새로운 제한에 지정합니다.
- Explorer 창에서 제한을 선택합니다.
- Properties 창에서,
- Attachment0을 MoveAttachment로 설정합니다.
- MaxForce를 5000으로 설정하여 최대 5000 Rowtons의 일정한 힘을 적용하여 목표 선형 속도를 달성합니다.
- RelativeTo를 World로 설정하여 연꽃 패드를 세계의 위치와 방향에 상대적으로 이동시킵니다.
- VelocityConstraint를 Line으로 설정하여 어태치먼트에서 선을 따라 힘을 제한합니다.
- LineDirection을 -1, 0, 0으로 설정하여 연꽃 패드를 세계의 부정적 X 축을 따라 이동시킵니다. 이 속성을 1, 0, 0으로 설정하면 연꽃 패드는 세계의 긍정적 X 축을 따라 이동하게 됩니다.
- LineVelocity를 15로 설정하여 연꽃 패드를 초당 15 스터드로 이동시킵니다.

설정한 힘의 양이 메쉬를 세계의 부정적 X 축을 따라 초당 15 스터드로 이동시키는지 확인합니다.
메자닌의 드롭다운 메뉴에서 Run 시뮬레이션 모드를 선택하고 Play 버튼을 클릭하여 시작합니다. 스튜디오는 현재 카메라 위치에서 3D 공간에 아바타 없이 경험을 시뮬레이션합니다.

PrismaticConstraint 제한 사용하기
PrismaticConstraint 객체는 두 어태치먼트 사이에 강한 접합을 만들어 주며, 이를 통해 각 부모 어셈블리가 서로에 대해 한 축을 따라 이동할 수 있게 해주는 기계적 제한입니다. 두 개의 어셈블리의 위치를 단일 축에 고정하면 각 어셈블리는 같은 방향으로 함께 회전하는 경우에만 회전할 수 있습니다.
이러한 유형의 운동은 플레이어들이 예측하기 더 쉬운 안정적인 게임 플레이 시나리오로 이어집니다. 예를 들어, 샘플 움직이는 객체 경험은 플레이어가 거대한 강을 조심스럽게 건널 수 있도록 로그 플랫폼을 이동시키는 데 PrismaticConstraint 객체를 사용합니다.
PrismaticConstraint.ActuatorType을 Motor로 설정하면 이 제한은 두 어태치먼트에 힘을 가하여 어태치먼트가 일정한 선형 속도에 도달하고 이를 유지하도록 합니다. 한 어태치먼트의 부모 어셈블리를 고정하면, 힘은 고정된 어셈블리는 정지 상태로 두면서 고정되지 않은 어셈블리를 일정한 선형 속도로 계속 이동시킵니다.
어셈블리를 이동시키기 시작하려면 PrismaticConstraint 제한이 알아야 할 사항은 다음과 같습니다:
- 힘을 가할 지점과 긍정적 또는 부정적 방향.
- 어태치먼트가 초당 몇 스터드를 이동할 것인지.
- 어태치먼트와 그 부모 어셈블리가 일정한 선형 속도에 도달하기 위해 엔진이 적용할 수 있는 최대 힘.
이 과정을 보여주기 위해, 여러분은 로그 어셈블리를 구성하여 두 개의 객체가 자식 어태치먼트를 가지도록 하여 PrismaticConstraint가 로그를 세계의 부정적 X 축을 따라 초당 40 스터드로 일정한 선형 속도로 이동하도록 할 것입니다.

어태치먼트 구성
어셈블리 내의 특정 객체를 이동하는 방향을 지정하려면 두 개의 Attachment 객체를 어셈블리에 추가한 다음 이들의 정렬과 방향을 3D 공간 내에서 구성해야 합니다. 샘플 움직이는 객체 경험은 고정된 부분과 겹치는 위치 근처에 월드의 X 축을 따라 두 개의 어태치먼트를 정렬하고 각 어태치먼트의 기본 축이 세계의 부정적 X 축을 바라보도록 설정합니다.
다음 섹션에서 PrismaticConstraint 제한을 구성할 때, 로그는 고정된 부분과 상대적으로 움직이게 됩니다. 즉, 로그는 3D 공간에 고정되어 움직일 수 없는 부분에서 멀어질 것입니다.
Prismatic 제한을 위한 어태치먼트를 구성하려면:
Explorer 창에서 PrismaticConstraintExample 폴더를 확장한 다음, 그 하위의 Log_DIY 모델을 확장합니다.
Log 메쉬에 어태치먼트를 삽입합니다.
- 메쉬 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 문맥 메뉴가 표시됩니다.
- 메뉴에서 Attachment를 삽입합니다. 어태치먼트는 부분의 중앙에 표시됩니다.
- 어태치먼트의 이름을 LogAttachment로 변경합니다.

동일한 프로세스를 사용하여 Anchor 부분에 어태치먼트를 삽입하고, 그 어태치먼치의 이름을 AnchorAttachment로 변경합니다.

View Selector 도구를 사용하여 세계의 좌표를 참조로 하여 LogAttachment와 AnchorAttachment를 회전시켜 각 어태치먼트의 기본 축이 세계의 부정적 X 축을 향하도록 합니다.

AnchorAttachment의 위치를 조정하여 두 어태치먼트를 세계의 X 축에 정렬합니다.

제한 구성
이제 각 어태치먼트가 같은 축에 정렬되고 로그가 이동할 방향을 바라보도록 배치되었으므로, PrismaticConstraint 제한의 속성을 구성하여 각 어태치먼트의 기본 축의 긍정적이거나 부정적인 방향에서 목표 선형 속도를 적용할지를 지정하고, 어태치먼트가 초당 몇 스터드를 이동할 것인지, 로그가 일정한 선형 속도에 도달하기 위해 엔진이 적용할 수 있는 최대 힘을 지정할 수 있습니다.
여러 사용 사례에 대해 다른 값을 선택할 수 있지만, 샘플 움직이는 객체 경험은 어태치먼트를 세계의 부정적 X 축을 따라 초당 40 라디안으로 이동시키기 위해 최대 50000 Rowtons의 일정한 힘을 적용합니다. 그러나 앵커 어태치먼트가 고정된 객체에 있으므로 오직 로그의 어태치먼트만 이동할 수 있습니다.
프리즘 제한을 구성하려면:
Log 메쉬에 PrismaticConstraint 객체를 삽입합니다.
- Explorer 창에서 메쉬 위에 마우스를 가져가고 ⊕ 아이콘을 클릭하여 문맥 메뉴를 표시합니다.
- 문맥 메뉴에서 PrismaticConstraint를 삽입합니다.
로그의 어태치먼트를 새로운 제한에 지정하여 로그가 고정된 블록 부분에 상대적으로 이동하도록 설정합니다.
- Explorer 창에서 제한을 선택합니다.
- Properties 창에서,
- Attachment0을 AnchorAttachment로 설정합니다.
- Attachment1을 LogAttachment로 설정합니다. 제한이 뷰포트에 표시됩니다.

Explorer 창에서 제한을 선택한 다음 Properties 창에서:
- ActuatorType을 Motor로 설정합니다. 새 속성 필드가 표시됩니다.
- MotorMaxForce를 50000으로 설정하여 최대 50000 Rowtons의 일정한 힘을 적용하여 목표 선형 속도를 달성합니다.
- Velocity를 40으로 설정하여 로그를 초당 40 스터드로 이동시킵니다.

설정한 힘의 양이 로그를 세계의 부정적 X 축을 따라 초당 40 스터드로 이동시키는지 확인합니다.
메자닌의 드롭다운 메뉴에서 Run 시뮬레이션 모드를 선택하고 Play 버튼을 클릭하여 시작합니다. 스튜디오는 현재 카메라 위치에서 3D 공간에 아바타 없이 경험을 시뮬레이션합니다.

초기 선형 힘 적용
객체의 선형 속도를 변경하는 또 다른 방법은 힘의 충격을 적용하는 것입니다. 힘의 충격 후, 객체는 마찰과 같은 반대 힘이 있다면 속도를 감소시켜 정지하게 되거나, 반대 힘이 없다면 일정한 선형 속도로 계속 움직입니다.
이 기술은 폭발이나 충격적인 충돌과 같은 중요한 게임 플레이 이벤트 후에 객체를 이동시키는 데 유용합니다. 이는 플레이어들에게 즉각적인 피드백을 제공하기 때문입니다. 다음 하위 섹션에서는 플레이어 캐릭터가 점프 패드와 충돌할 때 위로 하늘로 발사되는 초기 충격을 어떻게 적용할 수 있는지를 알려줍니다. 이 값을 새로운 값으로 조정하여 자신의 게임 플레이 요구 사항을 충족할 수 있습니다.
ApplyImpulse 사용하기
ApplyImpulse 메서드는 전체 어셈블리에 힘을 가하여 초기 선형 속도를 얻은 후 반대 힘이 작용할 경우 멈춘 상태가 되도록 힘을 적용합니다. 어셈블리를 움직이기 시작하려면, 다음의 정보를 알아야 합니다:
- 이동할 어셈블리.
- 초기 선형 속도를 달성하기 위해 힘을 가할 축.
- 각 축에 적용할 힘의 양.
이 모든 값을 스크립트에서 정의할 수 있습니다. 예를 들어, 샘플 스크립트는 이동할 어셈블리를 플레이어 캐릭터의 Humanoid 객체로 정의한 후, World의 긍정적 Y 축을 따라 플레이어를 발사하기 위해 2500 Rowton-초의 힘을 적용합니다. 플레이어 캐릭터는 질량이 다르기 때문에, 모든 플레이어를 발사할 수 있도록 이 힘을 증가시키고 균형을 맞춰야 할 수 있습니다.
ApplyImpulse를 사용하여 어셈블리를 이동시키려면:
Explorer 창에서 ApplyImpulseExample 폴더를 확장한 다음, 그 하위의 JumpPad_DIY 모델을 확장합니다.
JumpPad 부분에 스크립트를 삽입합니다.
- 부분 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 문맥 메뉴가 표시됩니다.
- 메뉴에서 Script를 삽입합니다. 어태치먼트는 부분의 중앙에 표시됩니다.
- 스크립트의 이름을 JumpScript로 변경합니다.
기본 코드를 다음 코드로 대체합니다:
local volume = script.Parentlocal function onTouched(other)local impulse = Vector3.new(0, 2500, 0)local character = other.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and other.Name == "LeftFoot" thenother:ApplyImpulse(impulse)endendvolume.Touched:Connect(onTouched)