Rage Tank

Unity Web Player | Rage Tanks
Unity Web Player | Rage Tanks

ACTION KEY
Move ↑ ↓ ← →
Fire Ctrl
Jump Space

Unity 2D Game Development란 해외 서적에서 제공하는 리소스를 이용하여 제작한 게임인데, 제작하는 과정에 막히는 부분이 생길 때, 책에선 어떤 방식으로 풀어나갔는지 참조하는식으로 개발하였습니다. 유니티 2D의 모든 기능을 다루어 보았다는 점에서 의미가 있었습니다.

소스 다운
https://dl.dropboxusercontent.com/u/209301417/Unity%20Game%20Sample/Rage%20Tank%201.0/Rage%20Tank.zip

제작 과정
  1. 배경을 만든다: 배경은 하늘, 산, 다리, 용암 4가지로 분류되는데 이것을 레이어로 묶고, z축의 값으로 어느 레이어가 앞에 올지를 정했습니다. 다리는 Polygon Collider 2D를 주어, 다리 모양 그대로 충돌 체크가 되도록 하였습니다.
  2. 플레이어 Controller를 만든다: 플레이어 오브젝트를 만들고, Controller를 제작했습니다. Controller는 PlayerStateController와 PlayerStateListener로 나뉘어져 있는데, Controller에서는 플레이어의 상태(idle,left,right,jump,kill,landing,falling,resurrect 등)를 enum으로 가지고 있습니다. Controller는 외부에서 키 입력을 Input으로 받아, 간단한 유효성 체크를 통과하면 enum으로 지정된 플레이어의 state를 바꿔줍니다. 예를 들어, 처음엔 플레이어의 state가 idle이겠지만, space 키가 입력되면, 현재 상태가 jump, falling, kill 상태인지 유효성을 체크한 후, 통과되면 state를 jump로 바꿔줍니다. state를 바꾸는 작업은 Listener에서 이루어지는데, Controller에서 Listener의 onStateChange 함수를 delegate함으로써 서로 연결되어 있습니다. Listener는 jump나 fire와 같은 바뀌는 순간 처리해야되는 작업을 하는 onStateChage 함수 뿐만 아니라 해당 상태를 가지고 있는 동안 계속 같은 작업을 해야되는 left, right 같은 상태를 위한 onStateCycle 함수도 구현하였습니다. 이로써 앞으로 플레이어의 상태를 바꿔줄 때는 플레이어의 state만 바꿔주면, 그 뒤의 일은 신경쓰지 않아도 됩니다. 이렇게 함수의 기능을 독립적으로 만들면, 추후 버그가 발생할 때도, 확인할 영역을 대폭 줄일 수 있어 큰 도움이되고, 기능적인 확장이 필요할 때에도 Side Effect를 발생 시키지 않습니다.
  3. 플레이어 Animation 제작: Unity 4 버전부터 나온 2D 애니메이션 기능인데, Animation을 제작하고, State별로 Parameter에 따라 상태만 변경해주면 되는 간단한 작업입니다. 애니메이션은 플레이어의 state에 맞춰, Idle Animation과 Walk Animation 두 가지를 제작하여 사용하였습니다.
  4. 카메라를 만든다: 카메라는 플레이어를 기본적으로 따라다니는데, Lerp를 이용하여 프레임마다 0.2(20%)씩 플레이어를 tracking하도록 구현하였습니다. 자세한 구현 방법은 Lerp()란 무엇인가? 포스팅에 기술하였습니다.
  5. 적 탱크를 만든다: 적 탱크를 만들어, 간단한 애니메이션을 붙이고 Box Collider를 붙이는건 어려운 점이 아니였지만, 인공지능을 붙여 다리 위에서 좌우로 움직이게 하는점에서 조금 시간을 들였습니다. 적 오브젝트에 Rigidbody와 함께 붙어 있는 Box 2D Collider의 크기를 줄이고, 적 오브젝트의 하단부에 붙여 무게중심을 낮춰 쉽게 적이 다리 가장자리에서 떨어지지 않도록 했습니다. 또한, 적 오브젝트 하위에 DefenseCollider를 만들어 실제로 충돌을 체크할 Box Collider를 만들었습니다. 마지막으로 다리 끝부분에 도착하면 방향을 바꿔 반대 방향으로 움직일 수 있도록 양쪽에 Guide 역할을 하는 Box 2D Collider를 제작하여 Guide Collider가 다리의 Collider영역에서 Exit하는 순간 Enemy의 방향을 바꿔주었습니다. 
  6. 이로써 Enemy 오브젝트는 몸의 절반 가까히 다리에서 벗어날때만 추락하게 되고, 기본적으로 다리의 양쪽 끝에 Guide가 빠져나갈 시 방향을 바꿔 다른 물리적인 힘이 가해지지 않으면 떨어지지 않도록 구현하였습니다.
  7. 적 탱크의 재생성 포인트를 만든다: 적 탱크가 파괴될 시 왜곡된 회전체에서 적이 재생성하여 떨어지도록 구현하였습니다. 
  8. 파이클 제작: 적 탱크가 플레이어의 미사일에 맞아 파괴되면, 빨간 플라스틱들이 터져나가도록 파티클을 생성하였는데, 기본 파티클에 스프라이트만 바꿔줌으로 간단하게 제작했습니다.

0 개의 댓글:

댓글 쓰기