hwankee@pulppixel:~/portfolio
3d-world
cat ~/portfolio/projects/ruby-adventure.md
back (esc)
PROJECT

루비의 모험

우수상

기획부터 구현까지 1인 개발로 완성한 졸업작품 3D 액션 RPG. 클릭 기반 이동과 콤보 전투, NavMesh AI 등 핵심 시스템을 직접 설계했습니다. 졸업전시 우수상을 받고 졸업생 대표로 발표했습니다.

2019.09 - 2019.11
역할: 기획, 설계, 구현, 레벨디자인 (1인) : 1인 YouTube 미니게임 하러 가기
# 배경

홍익대학교 게임소프트웨어전공 졸업작품으로, 기획부터 구현, 레벨디자인까지 3개월간 1인 개발한 3D 액션 RPG입니다. 처음부터 끝까지 혼자 완성한 첫 게임입니다. 데모가 아니라 끝까지 플레이되는 게임을 만드는 것을 목표로 잡았습니다.

혼자서 3개월이라는 조건에서 어려웠던 것은 세 가지였습니다. 전투 조작감을 손맛 나게 맞추는 것, 레벨·적·보스·컷씬까지 혼자 채워야 하는 콘텐츠 물량, 그리고 NavMesh나 물리처럼 처음 다루는 기술을 그때그때 익혀가며 진행해야 했던 것입니다.

루비의 모험 - 보스 전투. 마법진 위의 대형 보스와 플레이어 캐릭터
# 플레이어 FSM

마우스 우클릭 하나로 이동과 공격을 통합하고 스킬은 어떤 상태에서든 즉시 발동하게 하려니, 상태 전이를 직접 쥐고 있어야 했습니다. 마침 유니티를 처음 익힐 때 공부했던 일본 튜토리얼에서 배운 이중 변수(state / nextState) 기반 FSM 방식이 있었고, 졸업작품인 만큼 핵심 구조를 직접 만들어보자는 학습 목적도 있어 PlayerController의 5가지 핵심 상태를 커스텀 FSM으로 설계했습니다. 매 프레임 조건 검사와 상태 전이가 명확하게 이루어지는 구조입니다.

  • -마우스 우클릭 하나로 이동과 공격을 통합 - Raycast로 바닥/적/인터랙트 오브젝트를 판별하고, 거리에 따라 이동 또는 즉시 공격으로 분기
  • -스킬 입력은 어떤 상태에서든 쿨다운 + 마나 조건만 충족하면 즉시 전이
루비의 모험 - 일반 전투, 플레이어 FSM이 스킬셋으로 구성되어 있다.
# 전투, 스킬 시스템

조작감에 공을 들였습니다. 콤보와 스킬의 타이밍을 애니메이션과 맞추는 작업을 반복하며 다듬었습니다.

  • -콤보 공격 - CharacterCombat에서 waitAnimating()으로 현재 공격 애니메이션(Attack 0~4) 종료를 체크한 뒤 다음 공격 트리거. 쿨다운 기반 연타 방지
  • -점프 공격 (Skill 1) - NavMesh를 끄고 수동 물리로 점프. 마우스 커서 방향으로 착지점 결정(Ray), 벽/적/바닥 케이스별 분기. 착지 시 BoxCollider로 범위 넉백
  • -연속기 (Skill 2) - 4단 콤보 애니메이션을 Coroutine으로 제어. 애니메이션 상태 이름("Skill2_4")을 감지해 자동 종료
  • -질주 (Skill 3) - 시간제한 속도 증가 + 파티클 이펙트 + 효과음. Coroutine 타이머로 지속시간 관리
# 스탯, 데미지 시스템

CharacterStats를 베이스로 EnemyStats가 상속합니다. Stat 클래스는 modifier 패턴 - baseValueList<int> 수정치를 누적해서 장비/버프 효과를 유연하게 적용할 수 있는 구조입니다.

루비의 모험 - 거대 간수로부터 도망가는 씬
# 몬스터 AI
  • -일반 몬스터 - lookRadius에 진입하면 NavMesh 추적, attackRadius에 진입하면 멈추고 공격
  • -원거리 마법사 - 플레이어를 바라보며 일정 간격으로 투사체 생성. BulletController가 유도탄처럼 주기적으로 방향 갱신
  • -웨이브 스포너 - 복수 스폰 포인트에서 주기적 생성, 타이머 기반 생존 판정
# 상호작용, 인벤토리, 대화

콘텐츠 물량을 감당하기 위해 반복되는 것들은 베이스 클래스와 데이터로 묶었습니다.

  • -Interactable 베이스 클래스에 반경 감지 + UnityEvent 콜백. 태그 기반으로 Enemy/Quest/Chest/Door 분기
  • -ItemScriptableObject로 정의. Inventory Singleton + delegate로 UI 자동 갱신
  • -Queue<string> 기반 대화 시스템. 한 글자씩 타이핑하는 Coroutine
# 결과

2019 홍익대학교 게임학부 졸업작품전시에서 우수상을 수상했습니다. 혼자서 끝까지 완성한 범위와 실제로 재미있게 플레이되는 완결성이 평가받았고, 졸업생 대표 4인 중 1인으로 선정되어 재학생 대상 발표를 맡았습니다. 이후 1인 개발 프로젝트들의 원형이 된 첫 완성작입니다.

루비의 모험 - 상장 루비의 모험 - 당시 발표자 명단