Unreal Engine/Functional Implementation 20

언리얼 엔진 SaveGame과 GameInstance로 다회차(NG+) 구현하기 - 부활, 레벨 이동, 체크포인트 정리

UE5에서 다회차(NG+) 시스템을 구현할 때 가장 어려운 부분은, 서로 다른 성격의 데이터 흐름이 한 시스템 안에서 동시에 충돌 없이 돌아가도록 만드는 것이다.특히 아래 요소들이 함께 들어가기 시작하면 구조가 빠르게 복잡해진다.스테이지 이동플레이어 사망 후 부활체크포인트 저장 및 복원세이브/로드다회차 진입 시 일부 데이터 유지겉보기에는 각각 독립적인 기능처럼 보이지만, 실제 구현에서는 모두 같은 데이터를 서로 다른 시점에 읽고 쓰는 문제로 연결된다.예를 들어 사망 후 부활은 체크포인트 시점의 상태로 되돌려야 하고, 스테이지 이동은 현재 최신 상태를 다음 레벨로 이어가야 하며, 다회차는 월드 진행은 초기화하되 일부 데이터는 유지해야 한다.이번 글에서는 이런 상황에서도 안정적으로 동작할 수 있도록, 다회차..

언리얼 엔진 SaveGame 저장 시스템 구현하기 - GameInstance, 체크포인트, 자동 저장

언리얼 엔진에서 Save 시스템은 진행 중인 게임 데이터를 저장하고, 다시 같은 상태로 복구하기 위한 핵심 기능이다.특히 플레이어의 위치만 저장하는 수준이 아니라, 현재 진행 상황과 장비 상태까지 함께 복구해야 실제 플레이 흐름이 자연스럽게 이어진다.이번에는 GameInstance를 활용한 중앙 집중식 데이터 관리, 자동 저장과 수동 슬롯 저장 구조, 그리고 무기별 탄약 상태까지 복구하는 Save 시스템을 직접 구현한 과정을 정리해보려고 한다.내가 구성한 전체 흐름은 다음과 같다.SaveGame: 실제 저장될 데이터 보관GameInstance: 데이터 캐싱, 저장/로드 실행, 자동 저장 및 수동 슬롯 관리Checkpoint: 플레이어가 닿았을 때 현재 상태를 수집해 자동 저장 요청이번 시스템에서 저장 대..

언리얼 엔진 레벨 전환 데이터 관리 - GameInstance와 GameMode 역할 정리

Stage 기반 게임을 만들다 보면 가장 헷갈리는 부분 중 하나가 데이터 관리다.특히 아래 두 상황을 동시에 만족해야 할 때 구조를 어떻게 잡아야 할지 고민하게 된다.Player가 죽으면 현재 레벨 시작 시점의 상태로 부활해야 한다.Player가 Level을 클리어하면 현재 상태를 다음 Level로 넘겨야 한다.겉보기에는 단순해 보이지만, 이 두 요구사항은 서로 반대되는 성격을 가진다.사망 시에는 현재 진행 중인 상태를 버리고 이전 상태로 돌아가야 하고,레벨 클리어 시에는 현재 진행 중인 상태를 유지한 채 다음 레벨로 넘겨야 하기 때문이다.이 문제는 각 클래스에 역할을 명확히 나누면 비교적 깔끔하게 해결할 수 있다.이번 글에서는 내가 실제로 구현한 방식을 기준으로, GameInstance와 GameMod..

언리얼 엔진 파괴 가능한 오브젝트 구현 - 폭발, 파편, 범위 대미지 만들기

FPS나 TPS 장르에서는 총격이나 폭발에 반응하는 파괴 가능한 오브젝트가 전투의 몰입감을 크게 높여준다.단순히 메시가 사라지는 수준이 아니라, 피격에 따라 상태가 변하고, 파괴 순간에는 이펙트와 사운드, 범위 대미지, 파편 연출까지 함께 들어가야 실제 게임 플레이에서 존재감이 생긴다.이번에는 그런 느낌을 살리기 위해, Player의 공격으로 파괴되는 자판기 오브젝트를 직접 구현한 과정을 정리해보려고 한다.오브젝트 이름은 자판기라는 역할에 맞춰 VendingMachine으로 두었고, 아래 조건을 만족하도록 구성했다.Player의 공격으로 파괴 가능일정 조건에 도달하면 불타는 상태 연출 출력파괴 시 폭발 이펙트와 사운드 출력일정 범위 내 액터에게 방사형 대미지 적용Geometry Collection을 이용..

사망 UI 출력 추가 변동 사항

25.09.11 변동 사항PlayerBase의 멤버 변수를 제거하고, PrimaryAttribute에 있던 공격자에 관한 데이터를 받아오는 Delegate로 수정하여 Player를 사망하게 한 공격자에 관한 정보를 Player 사망 UI에 전달하도록 해주었다.우선 PrimaryAttributeSet에 있는 Delegate에서 DYNAMIC을 제거하여 표준 C++ 델리게이트로 변경해주었다.PrimaryAttributeSet1234567891011121314151617181920212223242526272829303132333435363738394041424344PrimaryAttributeSet.h /** 델리게이트가 공격자 정보가 포함된 FGameplayEffectModCallbackData를 전달하도록..

언리얼 엔진 플레이어 체력 경고 UI 구현 - HP 20% 이하일 때 Widget과 사운드 출력

RPG, FPS, TPS 같은 장르에서는 플레이어 체력이 낮아졌을 때 위험 상태를 직관적으로 알려주는 연출이 자주 사용된다.단순히 수치만 줄어드는 것보다, 화면 경고 UI와 사운드가 함께 출력되면 플레이어가 현재 상태를 훨씬 빠르게 인식할 수 있다.이번에는 플레이어의 체력이 일정 수치 이하로 떨어졌을 때, 경고 Widget이 출력되고 심장박동 사운드가 재생되는 저체력 경고 시스템을 구현한 과정을 정리해보려고 한다.이번 구현의 조건은 아래와 같다.Player의 체력이 20% 이하로 떨어지면 경고 Widget 출력Widget이 표시되는 동안 심장박동 사운드 재생체력이 다시 20% 이상으로 회복되거나 사망하면 Widget과 사운드 제거이번 구현은 우선 빠르게 동작하는 결과를 만드는 것을 목표로 했기 때문에, ..

Ultimate Scan Effects and Screen Effects 추가 변동 사항

25.07.15 변동 사항Player와의 거리에 따라 가까울수록 높은 순위를 주기 위해, ST_ScannedEnemyData 생성BP_Scan_Player에서 위와 같이 Get Nearest Enemy 함수에서 Data 형식으로 반환하도록 하였고, 해당 Data에 있는 정보를 전달Scan할 때마다 Data 초기화도 시켜줌기존에 Out Actors 배열에 정보를 담고 반환했으나, 순위를 매기기 위해서 ST_ScannedEnemyData에 정보를 받고 반환하도록 수정함수 시작 시, ST_ScannedEnemyData 초기화BP_EnemyNormalBase에서 갖고 있던 Info Widget을 Scan 시, 생성한 Show Info Widget 함수를 통해 가시화되도록 설정기존에 EnemyNormalBase ..

Teleport 구현 추가 변동 사항

25.09.19 변동 사항기존 작업이 Player의 Abiltiy Grant 방식이 변경되면서 오류가 발생하게 되었다.급하게 수정해야했기에, GAS를 활용한 Teleport로 동작하는 것이 아닌 Teleport Scroll Button의 WBP에서 아래와 같이 노드를 연결해줘서 임시로 작동하도록 수정하였다.Teleport Scroll Button을 누르면 다른 Level에서도 특정 Level의 지정된 위치로 순간이동 시켜야한다.그래서 현재 Player가 있는 Level이 Teleport Scroll Button으로 이동되는 Level과 같은 Level인지 비교해준 뒤, 지정된 위치로 순간이동이 되도록 해주었다.그리고 IsTeleporting이라는 변수를 통해 Teleport Scroll Button을 ..

언리얼 엔진 GAS 텔레포트 구현 - UI 버튼으로 지정 위치 이동하기

게임 시작 시 연출용으로 만들어둔 Teleport 기능은, 구조만 잘 잡아두면 다른 시스템에도 충분히 재사용할 수 있다.이번에는 그 점을 활용해서, 기존에 GAS와 연동되어 있던 플레이어 등장용 Teleport 연출을 기반으로 Teleport Scroll 아이템 슬롯 버튼을 누르면 지정된 위치로 순간이동하는 기능을 구현했다.이번 구현에서 반영하고자 한 목표는 아래와 같았다.UI 버튼을 누르면 Teleport 발동Level에 자유롭게 배치할 수 있는 특정 지점으로 이동기존에 만들어둔 GA_Teleport, GA_EndTeleport 재사용새로운 목적지를 쉽게 추가할 수 있도록 확장성 확보단순히 버튼 하나와 좌표 하나를 직접 연결하는 방식으로도 구현은 가능하지만, 그렇게 만들면 목적지가 늘어날수록 관리가 빠..

언리얼 엔진 NPC 대화 UI 애니메이션 구현 - 열기, 닫기, 다음 대사 버튼 효과 추가

NPC 대화 UI는 단순히 텍스트만 출력하는 것보다, 등장과 종료 흐름이 자연스럽게 연결될 때 훨씬 완성도 있게 느껴진다.특히 플레이어가 대화창을 열고 닫는 순간, 그리고 다음 대사로 넘어갈 수 있는 버튼이 언제 눌릴 수 있는지를 시각적으로 잘 보여주면 UI 사용감이 확실히 좋아진다.이번에는 NPC 대화 UI가 열릴 때와 닫힐 때 애니메이션이 재생되도록 하고, 추가로 다음 대사 출력 버튼에도 반복 애니메이션을 넣어 플레이어가 상호작용 지점을 더 쉽게 인식할 수 있도록 작업한 내용을 정리해보려고 한다.이번 작업의 목표는 아래와 같았다.NPC 대화 UI가 열릴 때 애니메이션 재생NPC 대화 UI가 닫힐 때 애니메이션 재생다음 대사 출력 버튼에 시선 유도용 애니메이션 추가닫기 애니메이션이 끝난 뒤에만 UI 제..