1) 개요
개발기간 - 약 8개월 (혼자)
버전 및 언어 - 2019 / C#
플랫폼 - 모바일
무한 스크롤링이 된 상태에서 웨이브로 들어오는 몬스터들을 처치
핵심)
- 빌더 패턴 사용 > 적 종류에 상관없이 코드상으로 수정할 수 있는 방식을 채택 (csv 또는 db 생략)
- partial class & 확장 메서드 사용
- scriptable object 사용 > 직관적으로 스텟 수정이 용이
- Gizmos와 LineRenderer을 활용하여 적 경로 보여줌과 보다 쉽게 레벨 디자인 용이
아쉬운 점)
- 하드코딩된 부분들이 많음
- 다소 빈약한 보스 몹과 공격 패턴들
2) 전투
1. 키 입력
우선, 키 입력을 위해선 key로 KeyCode (플레이어 키 입력에 따른 키를 판별해 주는 클래스)와 value를 Action (void 메서드 이벤트형)를 사용

다음은 legacy된 KeyCode 형태, 움직이거나 메뉴창 여닫는 로직은 크게 볼 게 없으므로 생략
대안) Input System

다음으론, Update 함수 내 키 한번 눌렀을 때, 지속적으로 눌렀을 때와 뗐을 시에 대한 함수들을 호출
KeyCode는 321개이므로 바람직하지 않음. 매 프레임마다 총 963번을 루프 하는 셈

2. 스킬
현재 플레이어의 스킬은 크게 4 종류가 존재 > 미사일 / 총알은 개별 오브젝트로
- 총알 개수 증가
- 총알 속도 증가
- 유도 미사일 생성
- 보호막 생성
해당 스킬들은 플레이어 주변에 빈 오브젝트 위치로부터 생성되게끔 설정


발사체 개수 증가와 속도 증가는 하나로 묶었고, 보호막과 유도 미사일 생성은 개별 로직
아쉬운 점은 풀링 매니저로부터 생성 부분이 하드 코딩 되어있다는 점인데, 해당 오브젝트들을 관리하는 컨테이너라던지 그런 방식으로 해소 가능.

총알은 로직이 단순하므로 생략 > 미사일
Idle일 시 두 바퀴 시계방향으로 돌다가 쭉 위로 가서 유유히 사라지는 로직
적을 발견 시 즉시 타격, 사라 졌을 시 위 로직 반복
다른 미사일과 중첩 방지 로직은 레이캐스트 사용

미사일 공격과 idle은 개별 스크립트 컴포넌트로 관리 > AddComponent Destroy 함수 활용


3. 스텟
플레이어의 모든 스킬들은 스텟 클래스를 활용
아쉬운점) 스킬 4개를 고정으로 했다는 점, 스킬 시스템을 재구현하여 보다 더 많은 스킬들을 활용 가능

4. UI
HP바와, 시계 방향으로 점차 감소되는 스킬 쿨타임과 현재 점수표

스킬 UI는 두 개의 Sprite 오브젝트를 중첩하여 사용
대안) 셰이더 또는 마스크 사용 가능

적 / 아이템
아이템 스폰은 위치를 가지고 있는 배열 내 랜덤으로 임의의 위치로 활용

가장 많은 고민을 했던 부분, 특히 이 플젝에서 핵심적인 부분이라고 할 수 있다
Gizmos와 2차 베지어 곡선을 응용하여 적의 이동 경로 변경이 가능하다


적은 해당 베지어 곡선의 경로를 따라 이동

보스 몹
패턴은 스크립트로 관리 하였고 Boss_pattern_core 클래스로부터 상속받는 1부터 5 클래스들 내에 있는 코루틴 실행 현재로썬 패턴1만 구현된 상태

보스몹 클래스

패턴 코어 클래스

패턴1 클래스

레벨 구현
각 레벨들은 코드상으로 관리, 빌더패턴과 partial class 활용
핵심 로직) stack을 사용하여 순차적으로 레벨 진입, 아이템들은 별도의 stack으로 관리

첫번째 레벨에서 빌더패턴 활용, 아이템들 개수를 줄이거나 아예 못뜨게 설정도 가능
대안) 해당 로직을 함수화 시켜 보다 더 직관적으로 변경 가능

https://youtube.com/shorts/6w9DglMOsK4