프로젝트 목록
3D 협동 액션 RPG · Windows · 2025.09–2026.04 · DigiPen GAM400/450 팀 프로젝트

Triad of Valor

여럿이 함께 보스에 도전하는 액션 RPG입니다. 보스 공격·패링·체력 처리와 로그인을 맡고, 팀의 캐릭터 코드에 클라우드 저장을 연동했습니다.

Unreal Engine 5C++BlueprintRPC / ReplicationAnimNotifyStateSlateC#ASP.NET CoreHTTP / JSONAzure Cosmos DBPerforce
눈 덮인 항구에서 활을 사용하는 Triad of Valor 캐릭터
눈 덮인 항구의 플레이 화면입니다. 체력·스태미나·인벤토리 HUD가 보입니다. 출처: 팀원의 공개 튜토리얼 영상.
OVERVIEW

게임 소개

보스의 공격 시작·종료, 패링 가능 시간, 체력 처리와 로그인을 담당했습니다. 저장 컴포넌트와 C# API를 만들어 팀의 캐릭터 코드에서 장착품·인벤토리·진행 상태를 저장하고 불러오도록 했습니다. 레벨 이동 후 저장된 위치를 적용할지 결정하는 부분도 함께 작업했습니다.

Unreal Engine으로 만든 협동 액션 RPG입니다. 근접 캐릭터는 방어를, 원거리 캐릭터는 회피를 활용해 보스와 싸웁니다. 체력과 스태미나를 관리하고 무기를 바꾸며 여러 레벨을 탐험합니다.

MY CONTRIBUTION

맡은 일

01

보스 공격과 애니메이션

BossCharacter에서 공격 중인지와 재사용 시간을 확인하고 서버 RPC로 몽타주를 재생했습니다. 애니메이션이 끝나면 공격 상태를 해제하고 피격·사망 반응과 체력 UI를 연동했습니다. 보스 AI와 페이즈는 팀원이 구현했습니다.

02

패링 타이밍과 체력 처리

AnimNotifyState의 시작·종료 시점으로 적과 보스의 패링 가능 시간을 제어했습니다. HealthComponent.cpp에서는 서버가 체력을 변경하고 값을 복제하며 변경 이벤트를 보내도록 했습니다. 포인트 데미지 이벤트의 중복 바인딩도 막았습니다.

03

진행 상태와 인벤토리 저장

돈·사망 횟수·플레이 시간·지역·위치·직업·체력·스태미나·인벤토리·장착 상태를 JSON으로 저장하는 작업에 참여했습니다. 팀의 캐릭터 코드는 불러온 슬롯 순서와 아이템 수치·에셋 참조를 서버에서 적용합니다. 60초마다, 그리고 레벨 이동 직전에 저장하도록 했습니다.

04

Unreal과 C# 저장 API 연동

CloudSaveComponent가 ASP.NET Core API를 호출해 Azure Cosmos DB에 저장하도록 구현했습니다. 중첩 객체와 배열을 유지하고 누락된 필드에만 기본값을 넣었습니다. 조회 응답의 JSON 형식을 맞춰 게임에서 인벤토리를 다시 읽을 수 있게 했습니다.

05

로그인 화면과 비동기 요청

Slate 로그인 화면과 AuthSubsystem의 로그인·회원가입 요청을 구현했습니다. 응답 시간 초과, 네트워크 실패, HTTP 오류를 처리하고 콜백은 Game Thread에서 실행했습니다. 요청 전 서버 상태를 확인하는 기능도 추가했습니다.

06

저장 데이터 집계와 CSV 다운로드

캐릭터의 현재 저장 데이터를 집계하는 C# API를 만들었습니다. 돈·사망 횟수·플레이 시간을 요약하고, 지역별 분포를 조회하거나 집계 결과를 CSV로 내려받을 수 있게 했습니다.

ENGINEERING STORY

포털 이동 후 저장 좌표가 도착 위치를 덮는 문제

결과

팀의 레벨 이동·복원 코드에서 CloudSaveComponent와 C# API를 사용하도록 연동했습니다. 포털 이동 직후에는 도착 위치를 유지하고, 일반 로드에서는 지역 값을 비교하는 팀 코드에 따라 저장된 위치를 적용합니다.

문제

새 레벨에서 저장 데이터를 그대로 불러오면 포털 도착 위치가 이전 좌표로 덮일 수 있었습니다. 반대로 위치를 불러오지 않으면 재접속 시 마지막 위치에서 시작할 수 없었습니다.

해결 과정

팀의 레벨 이동 코드에 제가 만든 CloudSaveComponent를 연동했습니다. 팀의 캐릭터 코드는 이동 전 상태와 임시 전환 데이터를 저장합니다. 일반 로드에서는 지역 값과 레벨 전환 여부에 따라 위치를 적용하고, 포털 이동 직후에는 도착 위치를 유지하면서 돈·인벤토리·직업 등을 불러오도록 함께 작업했습니다.

DELIVERED WORK

개발 결과

  • 보스 공격 상태와 애니메이션 종료 처리
  • 적·보스의 패링 시간을 제어하는 AnimNotifyState
  • 체력 값 복제와 포인트 데미지 이벤트 중복 바인딩 방지
  • Unreal C++ · ASP.NET Core · Azure Cosmos DB
  • 인벤토리 복원과 포털 도착 위치 처리
  • 로그인·회원가입과 비동기 HTTP 요청

보스 공격·체력·패링, 계정 연동과 클라우드 저장을 담당했습니다. 캐릭터와 레벨 이동은 팀 공동 코드이며 제가 만든 저장 컴포넌트와 API를 사용합니다. 저장 API는 수업 예제에서 시작해 교수와 AI의 도움을 받아 개발했습니다.

다음 프로젝트Jumppers

포트폴리오 질문

질문 더 보기
최대 400자. Enter 전송, Shift+Enter 줄바꿈.