루비의 모험
우수상기획부터 구현까지 1인 개발로 완성한 졸업작품 3D 액션 RPG. 클릭 기반 이동과 콤보 전투, NavMesh AI 등 핵심 시스템을 직접 설계했습니다. 졸업전시 우수상을 받고 졸업생 대표로 발표했습니다.
홍익대학교 게임소프트웨어전공 졸업작품으로, 기획부터 구현, 레벨디자인까지 3개월간 1인 개발한 3D 액션 RPG입니다. 처음부터 끝까지 혼자 완성한 첫 게임입니다. 데모가 아니라 끝까지 플레이되는 게임을 만드는 것을 목표로 잡았습니다.
혼자서 3개월이라는 조건에서 어려웠던 것은 세 가지였습니다. 전투 조작감을 손맛 나게 맞추는 것, 레벨·적·보스·컷씬까지 혼자 채워야 하는 콘텐츠 물량, 그리고 NavMesh나 물리처럼 처음 다루는 기술을 그때그때 익혀가며 진행해야 했던 것입니다.
마우스 우클릭 하나로 이동과 공격을 통합하고 스킬은 어떤 상태에서든 즉시 발동하게 하려니, 상태 전이를 직접 쥐고 있어야 했습니다. 마침 유니티를 처음 익힐 때 공부했던 일본 튜토리얼에서 배운 이중 변수(state / nextState) 기반 FSM 방식이 있었고, 졸업작품인 만큼 핵심 구조를 직접 만들어보자는 학습 목적도 있어 PlayerController의 5가지 핵심 상태를 커스텀 FSM으로 설계했습니다. 매 프레임 조건 검사와 상태 전이가 명확하게 이루어지는 구조입니다.
- -마우스 우클릭 하나로 이동과 공격을 통합 - Raycast로 바닥/적/인터랙트 오브젝트를 판별하고, 거리에 따라 이동 또는 즉시 공격으로 분기
- -스킬 입력은 어떤 상태에서든 쿨다운 + 마나 조건만 충족하면 즉시 전이
조작감에 공을 들였습니다. 콤보와 스킬의 타이밍을 애니메이션과 맞추는 작업을 반복하며 다듬었습니다.
- -콤보 공격 -
CharacterCombat에서waitAnimating()으로 현재 공격 애니메이션(Attack 0~4) 종료를 체크한 뒤 다음 공격 트리거. 쿨다운 기반 연타 방지 - -점프 공격 (Skill 1) - NavMesh를 끄고 수동 물리로 점프. 마우스 커서 방향으로 착지점 결정(Ray), 벽/적/바닥 케이스별 분기. 착지 시 BoxCollider로 범위 넉백
- -연속기 (Skill 2) - 4단 콤보 애니메이션을 Coroutine으로 제어. 애니메이션 상태 이름(
"Skill2_4")을 감지해 자동 종료 - -질주 (Skill 3) - 시간제한 속도 증가 + 파티클 이펙트 + 효과음. Coroutine 타이머로 지속시간 관리
CharacterStats를 베이스로 EnemyStats가 상속합니다. Stat 클래스는 modifier 패턴 - baseValue에 List<int> 수정치를 누적해서 장비/버프 효과를 유연하게 적용할 수 있는 구조입니다.
- -일반 몬스터 -
lookRadius에 진입하면 NavMesh 추적,attackRadius에 진입하면 멈추고 공격 - -원거리 마법사 - 플레이어를 바라보며 일정 간격으로 투사체 생성.
BulletController가 유도탄처럼 주기적으로 방향 갱신 - -웨이브 스포너 - 복수 스폰 포인트에서 주기적 생성, 타이머 기반 생존 판정
콘텐츠 물량을 감당하기 위해 반복되는 것들은 베이스 클래스와 데이터로 묶었습니다.
- -
Interactable베이스 클래스에 반경 감지 +UnityEvent콜백. 태그 기반으로 Enemy/Quest/Chest/Door 분기 - -
Item을ScriptableObject로 정의.InventorySingleton + delegate로 UI 자동 갱신 - -
Queue<string>기반 대화 시스템. 한 글자씩 타이핑하는 Coroutine
2019 홍익대학교 게임학부 졸업작품전시에서 우수상을 수상했습니다. 혼자서 끝까지 완성한 범위와 실제로 재미있게 플레이되는 완결성이 평가받았고, 졸업생 대표 4인 중 1인으로 선정되어 재학생 대상 발표를 맡았습니다. 이후 1인 개발 프로젝트들의 원형이 된 첫 완성작입니다.