2019년 5월 12일 일요일

GMS2 Physics game example(GMS2로 만드는 물리 게임 소스)


오랜만에 게임을 제작하였습니다. GameMakerStudio가 GMS2로 업그레이드되면서 그동안 작업을 중단하고 있었는데 드디어 GMS2를 입문하였습니다.

어떤 게임인지 아래 완성된 동영상을 확인해보시기 바랍니다.




위 게임은 GMS2로 제작하였으며 모든 소스는 자유롭게 사용이 가능합니다.
https://drive.google.com/open?id=1p1Kr_RTqtIQtc0Ar2ZHg0MlH2sBC0h_D

기본 게임의 구성은 공이 움직이며, 해당 공을 사용자가 물체를 막아서 공을 밖으로 꺼내는 게임입니다. 여러개의 stage로 구성되며 여기에서는 2개만 제작하였습니다.

물리 세계의 기본

GMS2에서 물리를 사용하려면 room설정에서 Enable Physics를 check해주어야 합니다.

그리고 Gravity X, Y 값을 설정해주어야하는데 해당값은 중력 가속도 값입니다. 위에 예제는 는 정지해 있을때 물체가 움직이지 않는 우주 같은 공간이므로 X,Y의 중력가속도는 0이 됩니다. 만약 Bounce Ball 같은 게임이라면 Y값을 가져야 합니다.

다음 설정은 각 object별 물리 설정이 필요합니다.

Density

해당값은 밀도를 나타냅니다. 숫자가 크면 밀도가 큰 물체라 단단한 물체가 됩니다. 예외적으로 0의 값은 밀도가 무한대인 물체 즉 움직이지 않는 물체가 됩니다. 예제에서 벽의 경우 Density를 0으로 설정하였습니다.

Restitution

반작용 값입니다. 값이 크면 충돌할때 많이 튕기게 됩니다.
1은 충돌시 그대로의 힘으로 튕겨 나온다는 의미이고 0.5는 진입한 힘의 절반, 2는 진입했던 힘의 2배로 튕겨나온다는 의미입니다. 1보다 큰값은 자연상에는 없다고 보면됩니다.

Collision Group

설명이 복잡합니다.
1. 양수의 같은값 충돌 : 충돌 후 물체의 방향이 바뀌거나 튕겨나가거나 합니다.
2. 음수값의 충돌( 충돌 물체 모두 음수 ) : 전혀 충돌이 일어나지 않습니다.
3. 양수값과 다른쪽은 음수 또는 양수이나 같은 값이 아닌 경우:즉 1,2에 해당하지 않는 경우 충돌 후 충돌 이벤트는 발생합니다. 이벤트 처리에서 여러가지 처리는 가능하지만 충돌 방향이 바뀌거나 하지는 않습니다.

Linear Damping (선형 제동)

물체가 앞으로 가면서 제동이 걸릴때 얼마나 심하게 제동을 걸지를 설정하는 값입니다.

Angular Damping (회전 제동)

물체의 회전을 제동걸때 사용하는 값입니다. 크면 회전이 빨리 멈추게 됩니다.

Friction (마찰)

물체의 마찰값을 설정합니다. 값이 크면 빨리 멈추게 됩니다.

기타

물리 물체의 경우 충돌 영역을 따로 사용합니다. Modify Collision Shape 버튼을 눌러서 결정하고 물리 물체의 경우 움직임을 기존의 변수들을 이용하지 않고 phy_ 접두어 붙어 있는 변수나 함수를 사용합니다. 대표적으로 phy_active 이런 변수 입니다. 해당 변수는 물리 object의 동작을 멈출때 사용합니다.

따라서 전체 object를 멈추기 위해서는 상속을 이용하여 최상위 부모 object의 phy_active 값을 변경시켜서 멈추도록 합니다.












댓글 없음:

댓글 쓰기