정리
이 게임을 만들게 된건 과제 제출을 위해서였기에 규모가 크지 않습니다.
그래서 그런지 tree-sha처럼 알고 있는 큰 문제도 없고 분석할 부분을 나눌것도 없어서 그냥 전체적으로 써봅니다.
먼저 이 게임은 유니티가 기본 지원하는 기능들만을 이용했습니다.
유니티 2D 하면 유명한 NGUI라는 유료에셋이 있는데 말 그대로 유료라 사용하지 않았습니다.
무료 버전도 있긴 한데 너무 예전 버전인데다 앞으로 유니티를 계속 쓸거라면 차라리 내장되어 있는 기능을 공부하는 편이 더 이득인거 같아 UGUI를 활용했습니다.
그리고 컴포넌트들 또한 2D 버전들을 활용했습니다.
이 게임은 크게 5개의 화면이 존재합니다.
3개의 씬과 2개의 내부 창으로 이루어져 있는데요.
옵션과 크레딧 화면을 포함해 5개입니다.
시작 화면에선 게임 씬과 상점 씬에 갈 수 있고 옵션을 통해 사운드를 on/off 할 수 있습니다. 여기서 크레딧도 볼 수 있죠.
씬 간의 정보 공유는 PlayerPrefs를 이용한 유니티 저장 기능을 이용해 저장하고 불러옵니다.
저장하는 것은 5가지. 사운드 토글 2개, 코인 개수, 생명, 경직 회복 속도입니다.
생명과 경직 회복 속도 같은 경우 상점에서 구입, 내역 그리고 인게임 적용을 위해서입니다.
버튼들의 경우 유니티 UI를 활용했습니다. 만들면 Canvas가 생기면서 진행되는 그것 맞습니다.
단 인게임에 존재하는 좌우 이동 버튼은 Raycast를 활용했습니다. 누르고 있는 동안만 정확히 움직일 필요가 있기 때문입니다.
게임 씬에선 PlayerPrefs 정보를 가져와 생명력과 코인을 표시하고 그 상태에서 시작하게 됩니다.
모든 스프라이트들은
이런식으로 되어있습니다.
드로우콜을 줄이기 위해 미리 그림들을 같은 것끼리는 합쳐두고 유니티 내부 기능으로 쪼개서 사용합니다.
스프라이트 모드를 Multiple로 두고 Sprite Editor로 쪼개면
이런식으로 따로 쓸 수 있습니다.
본 게임의 경우 전부 도트라 하나하나의 해상도가 낮아 정말 최적화의 끝을 보고싶다면 모든 이미지를 한 장으로 합쳐서 쪼개는 것도 방법일 수는 있겠지만... 어차피 사용 이미지 자체도 별로 없으니 적당히 같은 종류의 이미지들끼리만 합쳐도 별 차이 없을거라 생각합니다.
이후 인게임에는 동작하는게 크게 세 가지 있습니다.
이동하는 플레이어 캐릭터
랜덤 생성되며 떨어지고 깨지는 고드름
깨진 고드름이 있던 자리에서 생성되는 빙글빙글 도는 코인
일단 위 세 개는 전부 Rigidbody2D 컴포넌트와 Collider 2D 컴포넌트를 지니고 있습니다.
캐릭터의 경우 플레이어가 조작할 수 있는건 좌우 이동밖에 없습니다. 그리고 이동 거리에 따라 동작이 바뀝니다.
대충 10만큼 이동할때마다 이미지 두 개가 번갈아 출력됩니다.
그리고 벽에 닿아 있을 때는 그 방향으로 키 입력을 계속 해도 움직이지 않습니다.
다른 오브젝트와의 상호작용으로는 고드름이 땅에 닿기 전에 맞으면 체력이 줄고 0이 되면 게임이 끝납니다.
체력이 1 이상 남아있다면 2초 동안 깜빡이며 무적 시간을 가지고 상점에서 구매한 경직 시간에 따라 움직이지 못 하는 상태에 빠집니다.
코인을 먹으면 코인 소지량이 오릅니다.
고드름의 경우 천장에서 랜덤 생성되며 천장에 걸쳐있는 동안엔 천천히 떨어지다 나오면 정상적으로 중력을 받기 시작합니다.
땅에 떨어지면 파편과 효과음을 내고 2초 뒤 사라지며 코인을 뱉습니다.
플레이어 캐릭터가 맞을 경우엔 코인을 뱉지 않습니다.
오브젝트 풀링을 사용하여 300개의 풀 중에서 껏다켰다 하며 생성되고 사라집니다. 파편 또한 내장되어 있습니다.
코인의 경우 고드름이 땅에 떨어졌을 때 랜덤한 방향으로 튕겨 나갑니다.
코인의 빙글빙글 도는 모션은 직접 애니매이션으로 제작했습니다. 이런식의 2D의 경우 애니메이션으로 쓸 모든 그림이 그려져있다면 직접 연결하기 굉장히 쉽더군요. 물론 관절이 있어서 막 꿀렁이는(?) 그림들의 경우 훨씬 복잡합니다.
Physics2D Material을 사용해 튕기는 효과와 살짝 미끄러지는 효과를 추가했습니다.
플레이어에 닿으면 코인 소지량이 오르며 코인 습득 효과음을 내며 사라집니다.
고드름과 마찬가지로 오브젝트 풀링을 사용하여 300개의 풀을 가집니다.
오브젝트 풀링의 경우 제 주관적으로는 미리 Hierarchy에 300개를 다 만들어두고 public 배열에 하나하나 집어넣고 쓰는게 제일 최적화에 좋을거라 생각하는데 300개를 수작업으로 넣는 것은 개발자 입장에서 너무 비효율적이라 어떤 방법이 제일 좋을지 모르겠습니다.
미리 300개를 만들고 for문을 돌려 Find로 배열이나 리스트에 연결해줄지 아니면 Awake에서 인스턴스 생성을 함과 동시에 배열이나 리스트에 연결해줄지..
또 만약 후자의 경우엔 비동기 로딩을 했을 때 저부분까지 로딩을 해주는지도 의문이네요.
아무튼 적고보니 기능이 정말 없군요. 이게 전부이고 여기서 얻은 코인은 상점에서 이용 가능합니다.
요구량보다 코인 소지량이 많으면 구입이 이루어지고 다음 단계 구입으로 이어집니다.
부족하면 경고 문구를 띄우고 구입이 이루어지지 않습니다.
'Icicle Game (2D) > 분석' 카테고리의 다른 글
1.03버전 분석 5 (로딩) (0) | 2018.01.12 |
---|---|
1.03버전 분석 4 (상점화면) (0) | 2018.01.12 |
1.03버전 분석 3 (게임화면) (0) | 2018.01.11 |
1.03버전 분석 2 (메인화면) (0) | 2018.01.10 |
1.03버전 분석 1 (서론) (0) | 2018.01.09 |