⭐️ 2022 MWU 공모전에 제출한 로그라이크 1인 프로젝트입니다.
⚡ 절차적 던전 시스템 [스크립트 폴더]
- 랜덤맵 생성 : 현재 스테이지에 따라 레벨 디자인
- 몬스터 스폰 : 현재 스테이지에 따라 레벨 디자인
- 미니맵 표시 : 초록색(플레이어), 하얀색(일반), 빨간색(보스, 최장거리) [bfs]
⚡ 스킬 시스템 [스크립트 폴더]
- 스킬 UML
- Ability Base : Scriptable Object 상속 ⇒ 모든 스킬 공통 멤버 정의
- Ability Implement : Ability Base 상속 ⇒ 각 스킬 구체화
- Ability FSM : Ability Base 참조 ⇒ 각 FSM의 스킬 데이터가 갖는 스킬 상태 관리
- Pooling Manager : 스킬 시전 또는 종료 시 스킬 오브젝트와 사운드 풀링
⚡ 퀘스트 시스템 [스크립트 폴더]
- 퀘스트 UML
- Quest Base : Scriptable Object 상속 ⇒ 모든 퀘스트 공통 멤버 정의
- Count Base : Quest Base 상속 ⇒ 카운트 기반 공통 멤버 정의, 프로퍼티를 사용해서 셋될 때 완료조건 체크
- Objective Base : Quest Base 상속 ⇒ 목표 기반 공통 멤버 정의
- ILoop : 반복 퀘스트 인터페이스 멤버 정의
- ISequential : 순차 퀘스트 인터페이스 멤버 정의
- Quest Implement : 기반 퀘스트를 상속, 필요 시 반복 퀘스트와 순차 퀘스트를 다중상속해서 각 퀘스트 구현
- Quest Manager : Quest Base형 리스트를 참조해서 퀘스트 진행 상황 관리
⚡ 인벤토리 시스템 [스크립트 폴더]
⚡ 풀 시스템 [스크립트]
✨시행착오와 개발 후기
- 기술적 어려움
- 해결1 : 함수의 호출 스택을 따라가거나 로그 찍어보기
- 해결2 : try~catch를 통한 예외처리하기
- 해결3 : static과 flag 필드 사용하기
- 가독성 저하와 유지보수 어려움
- 원인1 : 프로젝트 초기 설계 고민 시간에 투자 하지 않았음
- 원인2 : 구현 후 기능이 정상 작동 한다면 코드 검토를 후순위로 미뤘음
- 해결1 : 각 함수가 하나의 책임을 맡을 수 있도록 분리하기
- 해결2 : 함수 내부 중복되는 코드조각은 하위 함수로 분리하기
- 구체적인 설계의 중요성
- 개발 초기 설계보다 구현에 집중 하는 것이 효율적이라고 생각했음
- 개발 진행 과정에서 간단한 기능의 추가에도 여러 곳에 접근 해야 하는 상황이 많아졌음
- 앞으로의 개발에서는 구현 전 충분한 설계 시간을 갖도록 노력 중임
- 코드의 지속적인 검토와 리팩토링의 중요성
- 구현한 기능이 정상적으로 작동 한다면 코드의 검토를 후순위로 미뤘음
- 프로젝트의 규모가 커지면서 중복코드와 불필요한 코드가 많아져 예외처리에 시간이 오래걸림
- 코드 리팩토링을 진행하면서 더 간결한 코드를 작성하고 프로젝트 구조를 다시 정리 할 수 있었음
- 기반지식의 중요성(Tech)
- 컴파일러 : 스킬 FSM을 컴파일러 시간에 배운 전이함수에 따른 상태전이로 이해했음
- 소프트웨어공학 : 클래스 구조를 설계 할 때 소공 시간에 배운 UML이 도움되었음
- 객체지향 언어 : 상속 관계 설계 시 객체지향 언어 시간에 배운 상속과 다형성이 도움되었음
- 알고리즘 : 보스방을 위한 최장거리를 구하거나 미니맵 표시를 위해 bfs 알고리즘을 사용했음