본문 바로가기

Programming/Unity

Unity | 2D Side Scroller

[메탈슬러그]

 

 저는 대전 액션, FPS, RTS, MOBA 등 여러 장르의 여러 게임을 줄곧 해왔지만 항상 제 마음속에 최고의 게임 중 하나는 '메탈슬러그' 시리즈였습니다. 오락실 전성기의 마지막 세대였던 저는 물론이고 제 친구들 역시 '메탈슬러그' 시리즈와 'KOF' 시리즈로 대표되는 SNK의 게임을 즐겨했었습니다. 특히 '메탈슬러그' 시리즈는 횡스크롤 런앤건 장르의 명작이라고 불리며, 현재는 시리즈의 명맥이 끊겼지만 그럼에도 불구하고 아직까지도 플레이하는 사람이 많은 게임입니다.

 직관적인 조작법, 스테이지 - 보스라는 친숙한 레벨 디자인, 화려하고 디테일이 느껴지는 픽셀 아트(도트 그래픽), 강렬한 BGM 이외에도 모든 요소들이 게임에 잘 어우러져 게임 플레이 자체의 재미는 물론 게임 요소들을 '구경'하는 재미도 있는 게임이었습니다. 수많은 명작들이 횡스크롤 장르에서 나타났지만, 저에게는 '메탈슬러그' 시리즈가 횡스크롤 장르의 최고의 게임이었고, 앞으로도 그럴 것입니다.

1. 게임 기획


 위에서 언급했다시피, 횡스크롤, 특히 런앤건 장르는 후대의 게이머들에게 깊은 인상을 남겼고 현재도 '메탈슬러그' 시리즈, '콘트라' 시리즈, '록맨' 시리즈를 계승한 게임들이 많이 나오고 있습니다. 예를 들자면 'Broforce'나 'Katana Zero'와 같은 게임들이 있습니다.

 저 역시도 깊은 인상을 받은 한 명의 게이머로서 이 장르를 한 번 시도해보면 좋을 것이란 생각이 들었고, 2010년대 후반 인기를 끌며 나타난 'Playerunknown's Battlegrounds', 'Fortnite Battle Royale', 'Apex Legends'로 대표되는 '배틀 로얄' 장르와의 결합을 생각해보게 되었습니다.

 자세한 건 현재 언리얼 엔진 4로 구현 중이라 깊이는 말씀드릴 수는 없습니다 :)

2. 게임 컨셉트 및 게임 구현


[저지 드레드]

 군대에 있었을 때라고 기억합니다. 설비병이었던 저는 일병 시절 산재 생활관이라고도 하고 직감이라고도 하는 곳에서 생활하고 있었습니다. 쉬는 날 우연히 TV를 보고 있었는데 영화채널에서 '저지 드레드'가 방영 중이었습니다. 우울한 분위기, 상당히 강렬한 슬로우 모션과 색감을 이용한 연출, 고립된 공간에서 느껴지는 스릴 등 영화 자체가 가진 미학이 독특해서 깊은 인상을 주었습니다.

 특히 주인공인 '드레드'의 캐릭터성이 강직함 그 자체였는데, 다른 영화처럼 입체적인 캐릭터를 부여하지 않고서 오히려 주인공의 성격을 강하게 나타내는 연출이 되었습니다.

 그래서, '저지 드레드'의 설정을 모티브로 해서 게임 컨셉트를 몇가지 정했습니다.

  1. 주인공은 '저지'라는 영화 극 중 직업 대신 '형사' 혹은 '경찰'
  2. 포스트 아포칼립스의 배경
  3. ...

 그렇게 해서 나온 캐릭터 스프라이트입니다.

[Idle 스프라이트]
01234
[기타 스프라이트]

 

 캐릭터 디자인과 스프라이트가 완성됐으니 이제 게임 구현을 할 차례입니다.

 

 Unity로 'AR설명서'를 개발했었지만, 게임 개발을 해본 적은 없었기 때문에 제일 먼저할 것은 바로 '구글링'이었습니다.

'Brackeys'라는 유튜버가 Unity에 대한 기본 튜토리얼부터 심화과정을 올려뒀기 때문에 혹시라고 게임 개발을 해보실 분들은 참고하시길 바랍니다. (참고로 2D 횡스크롤에 대한 한글 자막은 없습니다...)

 

[Animator]

 Animator는 다음과 같은 Parameter와 Transition을 주어 유기적으로 스프라이트 간 변환이 일어나도록 했습니다.

 

[Run → Idle]

 예를 들어, 달리는 모션(Run)에서 대기 모션(Idle)으로 바뀌기 위해서는 'IsRunning'이 활성중일 때, 속도가 0.01 이하가 되면 멈춰서게 됩니다.

 Animator 부분은 많이 꼬일 수 있는 부분이라 생각을 많이 하고 설계하는 것이 중요합니다. 한 번 꼬이고 수정하다보면 손을 댈 수 없을 정도로 망할 수도 있겠다는 생각이 들었습니다.

 

[Unity]

 기본적으로 'Player'를 제어하는 스크립트는 두가지가 있습니다.

  1. 'Player'의 물리 엔진, 충돌 체크를 담당하는 'CharacterController2D.cs'
  2. 'Player'의 속도, Animation을 이용해 기타 행동(점프, 달리기, 앉기 …)을 제어하는 'PlayerMovement.cs'

'CharacterController2D.cs'

 

'PlayerMovement.cs'


 그리고 캐릭터의 발사를 위한 'Weapon.cs', 슬라이딩 할 때 Particle을 이용한 연기를 표현하기 위한 'Effect.cs'도 있습니다.


'Weapon.cs'

더보기

 

firePoint는 Player의 자식 Object로 플레이어의 총구 위치를 따라다닙니다.

 

'Effect.cs'

더보기

Particle로 구현한 먼지 효과입니다.

if (animator.GetBool("IsSliding") == true && clone == null) 에서 클론의 존재를 체크하고

DestroyParticleSystem 함수를 통해 Particle의 재생이 끝나면 Destroy하게 됩니다.


 다음은 미리 구성해놓은 Object인 'Bullet'과 'Particle_Slide' Prefab입니다. 'Player'가 총을 쏠 때마다 'Player'의 자식 Object인 'FirePoint'에서 'Weapon.cs' 스크립트에 따라 'Bullet'을 생성해줍니다.

 생성된 'Bullet'은 'Bullet.cs' 스크립트에 따라 행동하게 됩니다.


'Bullet.cs'

더보기

 

 


 'Particle_Slide'는 위에서 언급한 'Effect.cs' 스크립트에서 제어됩니다.

 

[Tilemap Object]

 그리고 맵은 Tilemap, Tilemap Renderer, Tile Palette를 이용했습니다. 맵 자체도 원래 구성한 게임 컨셉에 맞는 Asset을 찾고 싶었지만 대부분 유료였던 이유로 포기하고(...) 무료 에셋을 사용했습니다.

 

[Layer 설정]

 레이어 설정을 통해 배경 부분과 실제 충돌하는 맵 부분, 기타 오브젝트의 순서를 정해줬습니다.

3. (미)완성 후 플레이 모습


 

 걷는 스프라이트는 위에 스프라이트와 다르게 수정을 한 번 한 상태입니다.

 

 혼자 스프라이트 제작과 게임 개발을 하려니 시간이 상당히 많이 소요된 프로젝트입니다. Unreal Engine으로 새로이 제작할 예정인데, 이번에는 굳이 픽셀 아트가 아니라 게임 개발에 중점을 두고 완성을 목표로 제작해보고자 합니다.

'Programming > Unity' 카테고리의 다른 글

Unity | AR 사용설명서  (0) 2019.11.06