GRADUATION PROJECT · 2023.11 — 2024.11

Godot 횡스크롤 라인 오펜스

여러 라인에서 유닛이 진격하고 맞붙는 횡스크롤 라인 오펜스입니다. 게임빌의 에르엘워즈를 레퍼런스로 삼았고, 유닛을 컴포넌트와 상태 노드로 조립하는 구조를 직접 설계했습니다. 1인 개발 졸업 프로젝트입니다.

기획개발구조 설계
PLAY
횡스크롤 라인 오펜스 게임 플레이 화면
Godot 4 · 스테이지 플레이 화면

프로젝트

수원대학교 졸업 프로젝트 · 1인 개발. 커밋 163개(2023.11 — 2024.07 공개 레포 기준). 아군 11종, 적 8종 유닛.

스택

Godot 4 · GDScript · Path2D · Autoload 싱글톤 · JSON 세이브

KEY DECISIONS

핵심 판단 3건

컴포넌트 조립, 라인 격리, FSM 전환. 눌러서 펼쳐 보세요.

02유닛을 컴포넌트로 조립한다
상황
유닛마다 체력, 공격 범위, 회복 범위, 효과 같은 기능을 조합해야 했다.
결정
기능을 체력바, 공격 범위, 회복 범위, 효과 컴포넌트로 나누고, 유닛 씬에 필요한 컴포넌트만 붙여 만들게 했다(1/3 컴포넌트화 완료).
이유
새 유닛을 만들 때 코드를 복사하지 않고 컴포넌트 조합만으로 끝내기 위해서다.
한계
컴포넌트끼리 직접 참조하는 부분이 남아, 7월에 상태 컴포넌트의 결합도를 다시 낮추는 작업을 했다.
03라인 간 전투를 엔진 물리로 격리한다
상황
여러 라인의 유닛이 한 화면에 있으면 다른 라인의 유닛과 충돌하거나 교전하면 안 된다.
결정
라인마다 Path2D로 이동 경로를 나누고(1/22), 물리 충돌 레이어와 마스크를 라인별로 매핑해 라인별 독립 전투를 구현했다(2/2).
이유
"같은 라인인지" 확인하는 필터링 코드를 따로 두지 않고, 엔진의 물리 판정만으로 격리하기 위해서다.
한계
물리 레이어 수에 한도가 있어 라인 수를 크게 늘리면 매핑을 다시 설계해야 한다.
04교전 컴포넌트를 상태 컴포넌트(FSM)로 바꾼다
상황
처음에는 교전 처리 컴포넌트(engageComponent) 하나가 유닛의 행동을 맡았다. 넉백 같은 추가 상태를 넣으려면 이 컴포넌트가 계속 커져야 했다.
결정
상태 관리 컴포넌트와 상태 노드로 나눈 FSM으로 교체했다(4/25). 대기, 이동, 사망, 넉백, 근접·원거리 단일·범위 공격, 시전, 범위 회복을 각각 상태 노드로 두었다.
이유
넉백과 추가 상태를 구현하려는 것이었다. 상태를 노드로 나누니, 새 유닛은 상태 노드를 조립하는 것만으로 만들 수 있게 됐다.
한계
상태 전환 규칙이 상태 컴포넌트에 모여 있어, 7월에 결합도를 낮추는 정리를 한 번 더 거쳤다.
전체 판단 기록 5건 보기 →

더 궁금한 점이 있다면
연락 주세요