DX9-B03 | DX9 Cat Quest — 상태 변화가 HUD와 Inventory에 보이기까지
이 글에서 확인할 내용
DX9 Cat Quest에서 Player의 HP나 EXP가 바뀌는 것만으로는 Gameplay 결과가 완성되지 않았습니다.
Damage를 받았으면 HP가 줄었다는 것을 화면에서 확인할 수 있어야 했고, 아이템을 사용했다면 실제로 회복됐다는 결과가 보여야 했습니다.
EXP를 얻었을 때도 값만 바뀌는 것이 아니라, Player가 바로 알아볼 수 있는 피드백이 필요했습니다.
이 프로젝트에서는 CStatus의 변화가 CHUD, CInventory, Pickup, CWorldNumber, NPC 상호작용으로 이어지도록 연결했습니다.
이 글에서는 UI의 모양보다 Gameplay 안에서 바뀐 값이 어떻게 화면 결과와 상호작용으로 이어졌는지를 중심으로 정리합니다.
Player 상태를 화면에서 확인할 수 있게 했다
Player는 CStatus를 통해 HP, MP, 공격력, 방어력, Level, EXP 같은 상태값을 가지고 있었습니다.
전투에서 Damage가 들어가면 내부적으로는 HP 값이 줄어듭니다.
하지만 값만 바뀌고 화면에서 확인할 수 없다면 Player는 현재 상태를 알기 어렵습니다.
그래서 CHUD가 Player의 Status를 참조해 HP / MP Bar와 Number UI를 보여주도록 연결했습니다.
Text
Damage 발생
↓
CStatus 변화
↓
CHUD
↓
HP 변화 확인이때 처음 체감한 것은 UI가 단순히 화면 위에 그려지는 장식이 아니라는 점이었습니다.
Gameplay 안에서 바뀐 상태를 Player가 이해할 수 있는 형태로 바꿔주는 역할이 필요했습니다.
Damage와 EXP 결과는 WorldNumber로 보여줬다
전투나 성장 결과는 HUD만으로는 바로 눈에 들어오지 않는 경우가 있었습니다.
그래서 CWorldNumber를 통해 Damage와 EXP 결과를 월드 위 숫자로 표시했습니다.
Text
Damage
↓
CStatus::Damaged
↓
CWorldNumber
↓
Damage Number 표시EXP를 획득했을 때도 비슷했습니다.
Text
EXP 획득
↓
Player EXP 증가
↓
CWorldNumber
↓
EXP Number 표시내부 값이 정상적으로 바뀌는 것과, Player가 그 변화를 즉시 확인할 수 있는 것은 다른 문제였습니다.
WorldNumber를 붙이면서 상태 변화가 실제 Gameplay Feedback으로 이어지는 흐름을 직접 경험했습니다.
Inventory에서 아이템 사용 결과까지 연결했다
Inventory는 I 키로 열 수 있었고, Player가 가진 Item / Armor / Magic 목록을 기준으로 ItemButton을 생성했습니다.
Potion 같은 Item을 선택하면 버튼을 누르는 것으로 끝나는 것이 아니라 실제 Player 상태 변화로 이어졌습니다.
Text
Inventory Open
↓
ItemButton 생성
↓
Potion 선택
↓
CItem::ItemEffect
↓
CStatus::Heal
↓
CHUD HP 증가당시에는 Inventory 화면이 열리고 Item이 보이는 것 자체도 중요하게 생각했습니다.
하지만 지금 다시 보면 더 중요한 부분은 UI에서 선택한 행동이 실제 Gameplay State 변화로 이어졌다는 점입니다.
Text
UI Input
↓
Item 사용
↓
Status 변경
↓
HUD 결과 반영당시 구현에는 지금 다시 보면 정리할 부분도 남아 있었습니다.
그래서 이 프로젝트의 Inventory를 완성도 높은 범용 시스템으로 설명하기보다, Item UI와 Player 상태를 실제 Gameplay 결과로 연결해본 경험으로 보고 있습니다.
Pickup도 같은 흐름으로 연결했다
필드에는 EXP Stone이나 Heal Stone처럼 Player 상태에 영향을 주는 Pickup Object도 있었습니다.
Pickup을 획득하면 내부 상태가 바뀌고, 필요한 경우 WorldNumber나 HUD를 통해 결과가 화면에 반영됐습니다.
Text
Pickup 획득
↓
Player Status 변경
↓
HUD / WorldNumber
↓
결과 확인예를 들어 EXP Stone을 얻으면 EXP가 증가하고, Heal Stone처럼 회복과 연결되는 Pickup은 Player HP 변화로 이어졌습니다.
이런 흐름을 통해 아이템이나 Pickup을 단순한 화면 Object가 아니라 Player 상태를 변경하는 Gameplay Object로 볼 수 있게 됐습니다.
NPC도 입력과 결과가 연결되는 Object였다
NPC는 배경에 서 있는 캐릭터로 끝나지 않았습니다.
Player가 가까이 접근하면 Collider로 범위를 확인하고 Emoji 힌트를 띄웠고, Enter 입력을 받으면 NPC_Use를 통해 기능을 실행했습니다.
Text
Player 접근
↓
Collider overlap
↓
Emoji 표시
↓
Enter
↓
NPC_Use
↓
Dialog / Heal / Item / WarpNPC 기능은 enum을 기준으로 나뉘어 있었고, 상황에 따라 Dialog, Heal, Item 지급, Warp 같은 결과로 이어졌습니다.
Quest처럼 완성되지 않은 분기도 있었고, Dialog 중복 생성처럼 지금 다시 보면 보강할 부분도 남아 있었습니다.
그래서 이 프로젝트에서 NPC를 완성된 Quest System으로 설명하지 않습니다.
대신 Player 접근 → 상호작용 가능 상태 표시 → 입력 → 기능 실행이라는 기본 Interaction 흐름을 직접 연결해본 경험으로 보고 있습니다.
각각 다른 기능처럼 보였지만 결국 같은 문제였다
당시에는 HUD, Inventory, Pickup, NPC를 서로 다른 기능처럼 만들었습니다.
지금 다시 보면 모두 같은 질문으로 묶을 수 있습니다.
Text
게임 안에서 어떤 상태가 바뀌었다.
↓
그 결과를 Player가 어떻게 알 수 있는가?Damage는 HUD와 Damage Number로 이어졌고,
Item 사용은 HP 변화로,
EXP와 Heal Pickup은 Status와 화면 Feedback으로,
NPC Interaction은 Dialog나 Heal, Item, Warp 같은 실제 결과로 이어졌습니다.
즉 이 프로젝트에서 UI와 Interaction을 만들며 경험한 흐름은 아래와 같았습니다.
Text
Gameplay State
↓
Result
↓
Visual / UI Feedback
↓
Player가 현재 상황을 이해지금 다시 보면
DX9 Cat Quest를 만들 당시에는 UI가 뜨고, Inventory가 열리고, NPC와 상호작용이 되는 것 자체에 더 집중했습니다.
지금 다시 보면 더 중요한 것은 그 기능들이 어떤 Gameplay State를 읽고, 어떤 값을 바꾸고, 그 결과를 어디에 보여주는가였습니다.
Text
State는 어디에 있는가?
누가 State를 변경하는가?
UI는 어떤 State를 읽는가?
Interaction 결과는 어디에 반영되는가?
Player는 그 결과를 어떻게 확인하는가?이 관점은 이후 DX11과 Unreal 프로젝트에서도 계속 이어졌습니다.
구현 방식은 달라졌지만 Attribute, Inventory, Equipment, UI Feedback을 볼 때도 결국 내부 상태와 화면 결과가 어떻게 연결되는지를 먼저 보게 됐습니다.
Runtime
아래 영상에서는 HUD, Damage Number, Inventory, Pickup, NPC 상호작용이 실제 Gameplay 안에서 동작하는 결과를 확인할 수 있습니다.
DirectX9 C++ Cat Quest — YouTube
DX9 Cat Quest에서는 단순한 형태였지만, Player의 내부 상태 변화가 UI와 Interaction을 통해 실제 플레이 결과로 보이기까지의 흐름을 처음 넓게 연결해본 경험이었습니다.