2025/09 9

사망 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 제..

언리얼 엔진 플레이어 사망 UI 구현 - 공격자 이름 표시와 경험치 페널티 계산

RPG에서 플레이어 사망은 단순히 캐릭터가 쓰러지는 연출로 끝나는 것이 아니라, 어떤 페널티를 주고 어떤 정보를 화면에 보여줄 것인지까지 함께 설계해야 하는 시스템이다.특히 사망 원인, 손실 자원, 복귀 흐름이 명확하게 전달되지 않으면 플레이어 입장에서는 왜 손해를 봤는지 체감하기 어렵다.이번에는 플레이어가 사망했을 때, 마지막 공격자의 이름이 표시되는 UI와 경험치 감소 페널티 시스템을 함께 구현한 과정을 정리해보려고 한다.이번 작업에서 반영한 목표는 아래와 같았다.Player 사망 시 마지막 공격자의 이름 표시사망 페널티로 잃게 되는 경험치량과 퍼센티지 계산 후 UI에 표시현재 레벨에서 가진 경험치가 페널티보다 부족하면 레벨을 차감하고 추가 경험치 차감1레벨 0% 구간에서는 더 이상 레벨이 내려가지 ..

ClassComponent 추가 변동 사항; 매개변수 추가

25.09.03 변동 사항ClassComponentBase에 있는 ClassChange 함수에 직업과 직업 차수를 가리키는 Gameplay Tag를 매개변수로 추가해주는 작업을 하였다.ClassChange 함수를 생성한지 꽤 돼서, Delegate를 통해 다른 클래스에서 전직 퀘스트라던가 계보 시스템에 사용되고 있었기에 찾아서 전부 수정해주었다.우선은 ClassChange 함수가 들어있는 ClassBaseComponent의 수정 사항이다.ClassBaseComponent1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071..

언리얼 엔진 스킬 해금 UI 구현 - 레벨업 시 신규 스킬 정보를 위젯에 표시하기

RPG에서 레벨업은 단순히 숫자가 올라가는 것보다, 그에 따라 어떤 스킬이 새롭게 열렸는지를 플레이어가 바로 알 수 있게 해주는 것이 중요하다.특히 이미 만들어둔 스킬 해금 위젯이 있다면, 이를 실제 레벨 시스템과 스킬 데이터에 연결해 “이 레벨에서 어떤 스킬이 새로 열렸는지”를 자연스럽게 보여줄 수 있어야 한다.지난 글에서는 신규 스킬 해금 시 출력되는 알림 Widget과 스킬창 메뉴 배지 시스템을 먼저 구현했다.이번 글에서는 그 구조를 바탕으로 플레이어의 레벨 시스템 및 스킬 데이터 테이블을 연동하여, 레벨업 시점에 맞춰 신규 스킬이 실제로 해금되고 해당 정보가 UI에 표시되는 흐름을 정리해보려고 한다.이전 글 보기[신규 스킬 해금 Widget과 스킬창 알림 배지 구현]이번 구현의 전체 흐름은 아래와..