지금껏 개발해본, 배틀 블루, 베틀 레드는 모바일 플랫폼 환경의 3D게임이었습니다.
이번에는, PC 플랫폼을 기반으로 하는 2D게임을 만들어보자는 생각이 들었습니다.
최근 재밌게 플레이 중인 니케라는 게임에서 미니게임 형식으로 타워디펜스를 플레이하고, 이런 타워디펜스 게임을 만들어 보면 좋을 것 같다는 생각이 들었습니다.
실제로, 예전에 스타크래프트 유즈맵을 만들 때 디펜스 유즈맵을 만들면서 제법 즐거웠던 경험이 있기도 했습니다.
다만, 단순한 타워디펜스에 차별점을 두고자.
타워디펜스에 로그라이크 게임을 추가하면 좋을 것 같다는 생각을 했습니다.
전체적인 게임의 흐름은 이러했습니다.
타워 디펜스 게임을 진행하면서, 스테이지를 클리어 해나감.
타워의 생성과 관련된 핵심 재료(ex: 설계도)들은 로그라이크 던전에 들어가서 부품을 구하도록 함.
① 타워 합성
② 타워 설치 (오브젝트 풀 패턴)
③ 타워 제거 (오브젝트 풀 패턴)
④ 타워 강화
⑤ 몬스터 생성 및 이동
① 랜덤 맵 생성 <BSP 알고리즘>
② 아이템(설계도 등의 재료)을 로그라이크를 통해서 획득
③ 몬스터와의 전투
④ 사망 시에 획득한 아이템들 모두 잃음.
① 타워의 공격 패턴 제어(스트레티지 패턴)
② 데미지 계산(옵저버 패턴 or 중재자 패턴)
: 데미지 계산식 == (최종 공격력(공격력 + 보정 수치(속성 등)) – 방어력) (크리티컬 반영 체크)(크리티컬 배율 – 크리티컬 저항) / 레벨 차이
Damage Calculation Formula == (Final Attack Power (Attack Power + Adjustment Value (e.g., from attributes)) - Defense) (Critical Reflect Check)(Critical Multiplier - Critical Resistance) / Level Difference

타워와 관련된 데이터를 저장하는 클래스
데이터 필드
이름 (string)
공격력 (float)
방어력 (float)
체력 (int)
공격 주기 (float)
스킬 주기 (float)
속성 (enum)
상태 (enum)
타입 (enum)
크리티컬 확률 (float)
크리티컬 배율 (float)
레벨 (int)
모든 타워 객체의 부모가 되는 기본 클래스.
공격 함수와 스킬 함수, 애니메이션 제어 함수 등의 기본 함수를 가지고 있다.
스트레티지 패턴으로써 구현되는 공격 인터페이스.
인터페이스를 구현한, 클래스들은 BasicTwoer에 타워에 조립되어, 실제 공격 프로세스를 진행할 수 있게 된다.
몬스터와 관련된 데이터 클래스
데이터 필드
이름 (string)
체력 (int)
쉴드 (int)
방어력 (float)
공격력 (float)
이동속도 (float)
공격 주기 (float)
상태 (enum)
크리티컬 저항 (float)
레벨 (int)
UI 레이어 > 게임 필드 3층 레이어(탄환 및 이팩트) > 게임 필드 2층 레이어(몬스터 및 타워, 캐릭터 등) > 게임 필드 1층 레이어 (배경) > 바텀 레이어(백그라운드)
① 파티클 이팩트 for UI 패키지
② UniTask 패키지
③ DOTween
④ 유니티 어드레서블