코딩하기 좋은날
Unity를 이용한 2D 모바일 게임 만들기 - 1 본문
Unity를 이용하여 게임을 한번 만들어 보고 싶어서 C#이나 유니티에 대해서 전혀 몰랐지만 만들고 싶은 것을 생각하고
필요한 기능들을 배우면서 미흡하게나마 게임은 만들어 보았습니다. 여러 블로그나 유튜브, Unity 매뉴얼들이 자세해서
크게 어려움은 없었던 것 같습니다. 만들면서 느낀점은 결국 기능은 어떻게 된다고 해도 재밌게 만드는 것과 그래픽,bgm 관련 부분들까지 혼자서 한다는 것은 정말 어렵다는 것을 느꼈습니다. C# 같은 경우는 처음 해보았지만 사실 다른 언어들을 꽤 많이 배워 왔기 때문에 크게 어려움은 없었습니다.
저는 물론 그런 능력이 안되므로 사용 된 모든 asset들은 유니티 asset store의 무료 asset과 다른 리소스 사이트의 무료 자료들을 이용하였습니다.
시작하기전에 기본적으로 유니티의 life cycle에 대해서 먼저 학습을 하고 시작하였습니다.(안드로이드 처럼 유니티도 life cycle이 존재하는데 이를 제대로 알고 시작해야 C# 스크립트를 짤 수 있습니다.)
저는 처음에 디펜스 형식의 게임을 만들겠다는 생각을 하였습니다. 양방향에서 몬스터가 나오게 되고 그 적들을 모두 무찌르면 스테이지가 클리어 되도록 하고 싶었습니다.
그래서 가장먼저 캐릭터를 찾았습니다. 캐릭터를 찾고 스테이지에 해당하는 맵을 찾아서 씬에다가 넣었습니다. 그리고 이 캐릭터가 움직여야 하므로 애니매이터 부분을 학습한 후 키보드를 이용하여 캐릭터가 움직이도록 구현을 하였습니다. -> Unity 2D 캐릭터 애니메이터, 애니메이션 과 같이 검색하면 아마 많은 정보를 찾을 수 있으실 겁니다.
그리고 모바일게임이므로 각각 좌 우 이동 버튼과 JUMP, ATTACK 버튼, 그리고 일시정지나 나가기를 할 수 있는 우측 상단의 Pause버튼도 배치를 시켰습니다. 캐릭터가 물리적 영향을 받게 하기 위하여 rigidbody와 colider를 공부하여 적용 시켰고 바닥과 충돌하였을 경우 바닥에 서있도록 바닥에도 colider를 넣어 주었습니다.
처음에 여기까지 만들었을 때 하나하나 기능이 구현될 때마다 정말 뿌듯함을 느꼈습니다. 이후 JUMP를 하게 하고 싶어서 JUMP기능을 구현하였고 마지막으로 공격을 할 때 총알이 발사되도록 하는 공격 기능도 구현을 했습니다.
-> 이러한 물리적 기능들은 Rigidbody와 colider를 잘 조합해서 모두 구현을 할 수 있습니다.
이후에는 몬스터가 나와야 하므로 2개의 몬스터 이미지를 구했고 하나의 몬스터는(슬라임) 점프도 하면서 이동하도록 구현을 하였습니다. 이후 캐릭터-몬스터 사이의 충돌, 몬스터-몬스터 사이의 충돌, 총알과-몬스터 사이의 충돌 등을 고려하여 각각 구현을 하였고, 좌우로 가면 맵이 더 존재하므로 카메라는 캐릭터의 중심을 따라가 되 맵의 끝 쪽을 향해 갈때는 카메라가 고정되어 있도록 처리를 해주었습니다.
몬스터는 좌우 에서 각각 일정 시간마다 한마리씩 나오며, 처음에는 좌우로 왔다갔다 하지만 캐릭터에게 공격을 받은 순간 부터는 캐릭터를 쫓아 오도록 구현을 하였습니다. (메이플 스토리를 생각하면서 비슷하게 만들었습니다.) 각각의 존재하는 벽(?)들은 점프로 올라갈 수 있습니다.
처음에 점프해서 벽에 올라갈때 벽의 상단부분에 colider를 주고 캐릭터의 발부분에 colider를 주어서 올라가도록 하였는데 이상하게 뭔가 어색하고 버그가 생기는 경우가 있었습니다. (메이플 스토리 처럼 딱 점프해서 올라가도록 하고 싶었습니다.) 찾아보니 platform Effector라는 것을 사용하여야 한다는 것을 알았고 사용하니 원하는 대로 구현이 되었습니다!(사실 저게 정확히 뭐하는건지는 잘 모르겠습니다.)
이렇게 하여 1스테이지를 모두 구현했더니 대략 이런 모습이 나왔습니다.
실제 모바일에서 작동할땐 버튼의 터치로 작동하여야 하지만, PC에서 테스트 할땐 키보드로 하는게 편하므로 두가지 다 작동하도록 구현하고 진행 했습니다.
스테이지를 시작할 때는 화면이 어두운것에서 밝아지도록 하는 것이 좋을 것 같아서 fade 효과를 주는 패널을 추가하였고, 스테이지 클리어시 각 몬스터마다 gold를 더해서 클리어시 획득 골드를 보여주는 panel을 또하나 생성까지 한 모습입니다. 또한 캐릭터가 몬스터와 충돌 할시 메이플스토리 처럼 약 2초간 캐릭터가 깜빡깜빡 거리며 그 시간동안은 무적이 되도록 처리를 해주었습니다.(충돌 x) 점프,총알 공격, 배경 bgm 등은 제가그냥 무료 bgm을 찾아서 마음에 드는걸로 soundmanager를 만든뒤 넣었습니다. 애니메이션 끼리 약간 충돌이 있어 버그가 있는 것 같지만 그래도 이렇게하여 1스테이지를 만들었습니다!
이후에 이제 Main 화면과 Stage 화면을 만들었습니다. 역시나 이미지를 구하는게 가장 어려운 것 같습니다.
메인화면은 위와 같이 만들었습니다. 게임 이름과 게임시작, 게임방법 버튼을 각각 구현하였고 게임시작지 stage 씬으로 넘어가고 게임방법 클릭시 방법을 설명하는 panel이 띄워지게 하였습니다.
스테이지 화면은 위와 같이 만들었습니다. 각 스테이지로 이동하는 버튼과 Home으로 돌아가는 버튼
캐릭터의 능력치를 업그레이드 하는 곳으로 이동하는 버튼을 구현 하였습니다. TOWER/BARRIER 버튼은 (스테이지를 시작 하기전에 타워나 배리어 같은 것을 설치할 목적으로 일단 두었지만 이 기능은 귀찮아서(?) 구현하지 않았습니다.)
그리고 우측에는 현재 GOLD와 DAMAGE, HP를 확인 할 수 있습니다. JUMPCNT도 캐릭터가 약간 일정거리를 순간이동 하는 기능을 넣고 이를 스테이지마다 횟수를 제한 시킬 목적으로 일단 두었지만 기능은 구현하지 않았습니다.
위는 상점의 씬화면이고 각각의 능력치를 업그레이드 하는 버튼으로 구성되어 있습니다. 각 가격이 있고 현재내가 가진 금액이 그에 맞다면 업그레이드가 되도록 만들었습니다.
자 여기까지 만들고 보니 당연히 이러한 일들을 하기 위해서는 DB가 필요하다는 것을 알 수 있습니다! 알아보니 유니티에는 sqlite를 사용 할 수 있습니다.(안드로이드와 매우 유사) 따라서 sqlite를 이용하여 각 능력치를 저장하고 불러오는 것에 대해서는 다음 게시글에서 마저 설명하겠습니다.
'Unity' 카테고리의 다른 글
유니티를 이용한 2D 모바일 게임 만들기 (두번째) (0) | 2020.03.19 |
---|---|
안드로이드에서 StreamingAssets 폴더에 있는 파일 읽기 및 Json 파싱 (0) | 2020.03.08 |
Unity를 이용한 2D 모바일 게임 만들기 - 2 (0) | 2020.02.19 |