티스토리 뷰
[Unity 게임 개발 고수 되기 #3.Battle Tower(타워 디펜스)] 게임 설명과 소스코드 + 영상
통통푸딩 2020. 5. 26. 17:32유니티로 타워 디펜스 게임을 만들어보았습니다. 😎
이름은 Battle Tower라고 하고, Kingdom Rush라는 유명한 게임을 참고하여 만들었습니다.
많이 부족하지만, 공부용으로 만든 것인 점 참고해주세요!
1. 게임 설명
게임은 메인메뉴가 나오고 레벨을 고르고 시작하게 됩니다.
맵은 해당 레벨의 타일맵을 프리팹으로 생성하여 배치합니다.
키보드 방향키를 통해서 카메라를 움직일 수 있습니다.
일단, 상단 오른쪽 위에 생명력, 돈, 몬스터 웨이브 수 가 UI로 나와있습니다.
- 생명력은 몬스터를 죽이지 못하고 도착 지점을 지나버리면 감소하며, 0이 되면 게임 오버 입니다.
- 돈은 타워를 사거나 업그레이드를 할 때마다 감소하며 몬스터를 죽일 시에는 추가됩니다.
- 몬스터 웨이브는 가운데 위의 하얀색 버튼을 누르면 몬스터가 출몰하는 수를 말하며,
마지막 웨이브 까지 생명력이 0이 되지 않으면 게임을 클리어 할 수 있습니다.
몬스터가 나오는 곳은 초록색 블랙홀이며, 도착하는 마지막 지점은 보라색 블랙홀입니다.
초록색 블랙홀에서 몬스터가 스폰되고,
보라색 블랙홀을 지나면 몬스터가 사라지면서 게임의 생명력이 감소됩니다.
타워 스폰 지점을 누르면, 타워 설치 UI가 나타나고 원하는 타워 버튼을 클릭합니다.
타워 종류는 궁수 타워(70원), 마법사 타워(80원), 대포(90원), 민병대(70원)가 있습니다.
버튼을 누르면 타워 종류마다 설명과 타워의 이미지가 보입니다.
여기서 바뀐 확인 버튼을 한번 더 누르면 해당 타워가 설치됩니다.
타워를 설치하고 설치된 타워를 누르면 하단에 타워의 설명 UI가 나타나고,
타워의 공격 범위와 업그레이드/팔기 UI가 나타납니다.
타워 업그레이드 버튼을 누르면 타워가 강해지며 타워의 이미지가 바뀌고,
타워 팔기 버튼을 누르면 해당 타워 금액의 반값을 돌려받으며 타워가 사라집니다.
타워 종류 중에 민병대를 설치하면, 병사들이 나타납니다.
병사들은 몬스터가 가는 길을 막아서고, 서로 공격합니다.
병사에 Collider를 넣어 몬스터가 가까이 오면 전진하여 공격하도록 했습니다.
병사는 각자 체력이 있고 몬스터에게 공격을 받아서 체력이 0이 되어 죽으면, 일정 시간이 지나 새로운 병사가 스폰됩니다.
물론 병사도 몬스터를 죽일 수 있습니다.
민병대를 클릭하면, 똑같이 업그레이드/팔기 UI가 나타납니다.
그런데, 조금 다른 버튼이 있습니다. 칼 버튼을 누르면 병사들의 위치를 이동시킬 수 있습니다.
이 때, 위치는 민병대 타워의 범위 안이어야 하며 몬스터가 지나다닐 수 있는 길이어야 가능합니다.
몬스터가 길을 지나갈 때, 타워의 범위안에 있는 한 타워가 공격을 합니다.
투사체의 데미지는 타워의 레벨에 따라 다르며, 타워의 종류에 따라 다릅니다.
타워의 범위 Collider와 몬스터 Collider의 충돌 시작과 끝을 이용하여
투사체를 발사합니다.
투사체의 종류는 많으며, 각 투사체의 Collider와 몬스터의 Collider가 충돌할 때 몬스터의 체력이 닳고 투사체 오브젝트는 비활성화됩니다.
다음은 몬스터와 병사가 서로 공격하는 모습입니다.
길막을 막아서기 때문에 멈춰있는 몬스터가 다른 타워의 범위 안에도 든다면, 공격하기에 효율적입니다.
그 외 개발 내용:
키보드 방향키를 눌러 카메라를 이동시킬 수 있으며,
ESC 키를 눌러서 게임을 멈출 수 있고, 게임을 다시 시작하거나 나갈 수 있습니다.
게임을 클리어하면, 레벨이 PlayerPrefs에 저장되어 다음 레벨이 레벨맵에 나타납니다.
타워의 종류도 많고, 업그레이드 할 때마다 타워의 이미지와 투사체 이미지/효과가 다르기 때문에 흥미롭게
플레이 할 수 있고, 몬스터의 종류도 21가지를 구현하였습니다.
몬스터 스폰의 순서는 Resources 폴더에 레벨마다 text파일을 저장하여 레벨을 불러올 때,
해당 레벨의 텍스트 파일을 읽어서 Stack에 저장하여 이용했습니다.
생성해야 하는 프리팹들은 모두 최적화를 위한 오브젝트 풀링을 이용했습니다.
오브젝트 풀링은 오브젝트의 생성과 파괴를 자주 하지 않고, 활성화와 비활성화하여 관리하는 것을 말합니다.
2. 소스 코드
자세한 내용을 알고 싶거나 소스 파일을 보고 싶으시면, 제 GitHub를 참고해주세요.
https://github.com/choijoohee213/BattleTower
3. 플레이 영상
YouTube 플레이 영상입니다.
읽어주셔서 감사합니다~~~😊😊