-
중단된 개발 프로젝트에서 작성했던 코드를 저장하기 위한 Repository입니다
-
현재 Repository에는 본인이 작성한 코드만 등록하였으며 이에 대해서만 설명할 것을 밝힙니다
-
몇몇 리팩토링 코드에서 중단이 된 부분 또한 파일에 포함시켰습니다
-
디렉토리 구조
- Scripts: 빌드 테스트에 사용되었던 코드를 모아놓은 디렉토리입니다
- Refectoring Scripts: 보완점이 필요한 코드들을 재작성하고 있던 디렉토리입니다
1. 장르
- 어드벤처 / 디펜스 / 샌드박스
3. 플랫폼
- Unity 3D / 6000.0.49f1 LTS
3. 개발언어
- C#
4. 개발기간
- 2025.01 ~ 2025.05 (프로젝트 중단)
- 현재 설명하는 스크립트는 모두 Scripts 파일 기준입니다
| 기능 | 설명 | 관련 스크립트 경로 및 파일명 |
|---|---|---|
| 몬스터 AI | FSM 기반의 적 캐릭터 AI 구현 | HealthEntity/HealthyEntity.csHealthEntity/Character.csHealthEntity/Enemy.csHealthEntity/Enemies/Enemy_0_000.cs ~ Enemy_0_006.cs |
| 몬스터 애니메이션 | Animator를 활용한 몬스터 행동 애니메이션 구현 및 몬스터 State에 따른 애니메이션 재생 | HealthEntity/Enemies/State |
| 적 탐지 및 길 찾기 | Collider 감지를 통한 적 탐지 및 A* 알고리즘을 활용한 네비게이션 기능 | HealthEntity/Enemies/DetectNavigation/AStarPathfinder.csHealthEntity/Enemies/Move |
| 몬스터 공격 | 몬스터 패턴에 따라 다양한 공격이 나올 수 있도록 기능 구현 | Attack |
| 스프라이트 | 몬스터가 바라보는 방향 및 공격방향에 따라 스프라이트 관리 | HealthEntity/Sprite/SpriteManager.cs |
| 버프 관리 | 몬스터 버프, 디버프 기능 구현 | HealthEntity/Buff |
| 스포너 | 몬스터 소환 조건을 설정할 수 있는 스포너 기능 구현 | HealthEntity/Enemies/Spawner |
| 기능 | 설명 | 관련 스크립트 경로 및 파일명 |
|---|---|---|
| 공용 스탯 | 몬스터, 블럭, 플레이어 공통으로 사용가능한 스탯 변수 | HealthEntity/Stat |
| 기능 | 설명 | 관련 스크립트 경로 및 파일명 |
|---|---|---|
| PriorityQueue | 적 탐지 중 우선순위가 높은 적을 탐지하기 위한 유틸리티 함수 작성 | Utilities/PriorityQueue.cs |
| CSV Parser | CSV 파일 내용을 Unity 내 SO로 변환하여 매핑하기 위한 파서 | Utilities/CsvParser.cs |
- Interface 기반 공격 실행 분리
- 공격데이터 SO화
- 발사체 동작 책임 분리
- AttackController 로직 최적화
| 변경점 | 이유 | 개선사항 |
|---|---|---|
IAttackHandler 인터페이스 도입 |
기존에는 AttackBase를 상속하여 근접/원거리 공격을 구분했기 때문에, 공격 로직의 중복이 발생하고 커스터마이징이 어려운 구조였습니다. 이를 개선하기 위해 IAttackHandler 인터페이스를 도입하였습니다. | 1. 근접/원거리 구분 없이 IAttackHandler만 구현하면 다양한 공격 방식을 자유롭게 커스터마이징 가능 2. 공격 로직을 실행 단위로 분리하여 기능 확장 및 유지보수가 쉬워짐 |
AttackDataSO(ScriptableObject) 도입 |
공격 계수나 수치 등의 데이터를 코드 내에서 직접 수정해야 했기 때문에, 기획자가 공격 밸런스를 조정하기 어려운 구조였습니다. 이를 해결하기 위해 공격 데이터를 ScriptableObject로 외부화하였습니다. | 1. 공격 수치를 SO로 분리함으로써 기획자와의 협업 효율이 향상 2. 밸런스 조정 시 SO 파일만 수정하면 되므로 유지보수와 테스트가 간편해짐 |
| 발사체 생성/동작 책임 분리 | 이전에는 발사체 생성, 방향 설정, 공격 적용 등의 모든 과정을 하나의 스크립트에서 처리했기 때문에 코드 중복 및 결합도가 높았습니다. 이를 개선하여 역할을 명확히 분리하였습니다. | 1. ProjectileHandler가 발사체 생성 및 방향 설정을 담당하고, ProjectileBase가 발사체의 실제 동작을 처리 2. 구조가 유연해져 유도탄, 폭발탄, 레이저 등 다양한 발사체 확장이 쉬워짐 |
- 부족한 버프 기능 추가 (복합 버프, 버프 중첩 처리 기능)
- 버프 데이터 SO화
- 버프 스탯 매핑 자동화
- 기능 분할 및 최적화
| 변경점 | 이유 | 개선사항 |
|---|---|---|
| 버프 중첩 처리 방식 변경 | 기존에는 동일한 종류의 버프가 새로 들어오면 기존 버프를 무조건 취소하고 새로 덮어쓰는 방식이었습니다. 그러나 이러한 방식은 게임 플레이에 어울리지 않는다고 판단하여 변경하였습니다. | 1. 동일한 종류의 버프가 기존에 존재할 경우, 두 버프 중 더 강한 효과만 적용되도록 개선 2. StackQueue를 이용하여 여러개의 버프가 들어와도 수치가 강한 버프 순서로 적용 가능 3. 여러개의 버프가 존재할 때 가장 수치가 높은 버프의 지속시간이 끝나도 그 다음으로 수치가 높은 버프가 곧바로 적용되도록 개선 |
| 버프 데이터 SO(ScriptableObject)화 | 이전에는 버프 데이터를 Factory에서 직접 하드코딩해야 했기 때문에, 기획자가 버프 수치를 직접 조정하기 어려웠습니다. 이를 개선하기 위해 버프 데이터를 ScriptableObject로 분리하였습니다. | 1. 기획자가 직접 수치를 조정할 수 있어 협업 효율이 향상됨 2. 유지보수 및 테스트가 쉬워짐 |
| 스탯 매핑 자동화 | 기존에는 Enemy 등의 코드에서 버프가 적용될 때, 스탯 값을 직접 조작하는 방식이었습니다. 이로 인해 버프가 해제되거나 중첩되는 상황에서 스탯 오류가 발생하는 문제가 있었습니다. | 1. 기본 스탯과 버프 스탯을 분리하여 계산함으로써, 스탯 충돌 문제를 예방 2. 버프/디버프에 따라 스탯이 변화할 경우, 스탯 데이터를 직접 수정하지 않고 자동 매핑이 이루어지도록 구조를 변경 |






