본문 바로가기

로블록스 개발 중급

관람차 만들기

목차

 

 

저번 경첩문 튜토리얼에서 HingeConstraints 를 사용해서 현실의 경첩을 사용한 문처럼 자연스럽 열리는 문을 문드는 방법에 대해서 살펴보았다. 로블록스의 물리 엔진을 사용하여 다양한 장치를 만들 수 있다. 이번 포스팅에서는 여러가지 constraint를 조합해서 좀더 복잡한 장치를 만들어보자. 관람차를 로블록스에서 구현하기 위해서 우선적으로 스스로 계속해서 돌아가는 모터가 필요할 것이다. 이 모터는 HingeConstraint를 조합하여 만들 수 있다. 

관람차 에셋 편집

관람차 모델을 받아보자. 로블록스에서 제공하는 pre-built place 을 편집을 누르면 로블록스 스튜디오에서 맵을 불러올 수 있다. 해당 맵을 불러오면 맵의 가운데 부근에 관람차가 있는데, 플레이를 누르면 꽤 멀리에서 캐릭터가 소환된다. 관람차 부근으로 카메라를 이동하여서 Play Here 버튼을 누르면 바로 관람차 근처에서 테스트를 할 수 있다.

 

이전 튜토리얼에서도 나온 내용이지만, 스튜디오의 Model탭의 Constraint Details 을 On으로 활성화한다. 이 옵션을 활성화하면 constraint 나 attachment의 기즈모를 게임편집창에서 볼 수 있다.

Attachment 붙히기

constraint를 사용할려면 일단 attachment를 모델에 추가시켜 놔야 한다. 여기서는 관람차의 모터를 만들 셈이므로 관람차의 휠에 attachment를 붙혀서 사용한다. 위에서 constraint Details 를 활성화 시켜 놓았기 때문에 attachment의 기즈모를 볼 수 있지만, 정확한 위치에 붙히기 위해서는 모델에서 관람차의 바퀴 부분과 고정된 부분을 분리를 시켜 놓아서 부착하자.

탐색기에서 FerrisWheel 모델의 화살표을 눌러서 펼치고 그 안에서 MainSupport 모델을 선택하자. 선택후에 이동 시켜서 wheel axle 과 support axle 의 모습을 잘 볼 수 있게 한다.

 

이동시킨 MainSupport 모델의 화살표를 눌러 펼친 후에 이번에는 SupportAxle를 선택한다. 그리고 attachment를 새로 추가하여 SupportAttachment 라고 이름 짓는다.

 

SupportAttachment 를 이동시켜서 아래의 이미지처럼 SupportAxle 의 안쪽의 가장자리로 오게 한다.

 

다시 FerrisWheel 모델에서 WheelAxle 파트를 선택하고 새로 attachment 를 추가하고 WheelAttachment 라고 이름짓는다.

 

이번에는 WheelAttachment 을 바깥쪽 가장자리 면으로 옮긴다. 이렇게 되면 다시 MainSupport를 제위치에 놓게되면 위에서 추가한 attachment들이 서로 마주보게 될 것이다.

 

두개의 attachment의 축을 조정하자. attachment 위로 마우스를 올리면 노란색축과 주황색축이 나온다. 노란색축을 모델의 안쪽을 가르키게 회전을 시키자. 두 attachment 모두 같은 방향, 즉 안쪽을 향하도록 한다.

HingeConstraint 로 연결

두개의 attachment를 추가하고 설정했으니 이번에는 HingeConstraint 로 연결시키고 모터로 사용해보자.

SupportAxle 에 HingeConstraint 를 새로 추가하고 MainMotor 로 이름 짓는다.

 

MainMotor 의 속성에서 Attachment0 에는 SupportAttachment 를, Attachment1 에는 WheelAttachment 를 설정한다.

 

이제 MainSupport 모델을 원위치로 다시 이동시킨다. 이동시킬 때에는 정확한 위치로 이동시키기 위해서 Snap to grid를 사용할 것을 추천한다.

Motor로 만들기

자연스러운 도어 만들기 에서 사용했던 HingeConstraints의 사용법은 원래 외부의 힘, 즉 캐릭터가 밀어야 그 힘으로 문이 열리는 구조이다. 이번에는 외부의 힘의 아닌 자체에 모터처럼 돌아가야 한다. 이때는 HingeConstraint의 Hinge 속성 섹션에서 ActuatorType 속성을 Motor로 변경하면 된다. 그러면 모터처럼 스스로 힘을 내서 돌아가게 된다. 

MainMotor 의 ActuatorType 속성을 Motor 모터로 변경한다.

 

AngularVelocity 속성을 0.314 으로 변경한다. 각속도 값은 얼마나 빨리 돌아가는지를 결정한다.

 

MotorMaxAcceleration 속성을 inf(무한)으로 변경한다. 무한 토크로 변경했기 때문에 아무리 무거운 관람차 바퀴라도 돌아가게 된다. inf 값은 직접 입력하기 어려우니 위의 MotorMaxAccelertation의 값을 카피하고 복사한다.

 

플레이를 하여 제대로 돌아가는지 확인한다.

 

주목할 점은 현실에서와는 다르게 단 한쪽의 constraint를 사용하여 모터로 사용하였다. 3D 게임은 현실처럼 보이는게 중요하지 사실 현실은 아니다. 많은 constraint의 사용은 게임을 느리게 만들 수 있으므로 되도록이면 적은 수의 constraint를 사용해야한다. 리소스는 가능하면 적게 사용하는 것이 끊기지 않는 게임을 만드는데 중요하다.