- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- rasterization
- graphics rendering pipeline
- SetPass Call
- 원티드 4기
- Tesselation
- 힙
- 베오메오
- 프로젝트
- UE 5
- Input Assembler
- UnReal
- 게임개발
- 디퍼드 렌더링
- 언리얼
- 포워드 렌더링
- 원티드 포텐업 게임개발 4기
- vertex shader
- 원티드
- 그래픽스 파이프라인
- occlusion culling
- 게임개발4기
- Output Merge
- Stack
- DrawCall
- im뱅크
- c++
- batches
- 스택
- 베오메오#개발일지
- bvh
평생 배우는 개발자
4차 프로젝트 회고 본문
MonsterWorld 프로젝트 회고
원티드 4기 언리얼 팀 프로젝트
개발 기간: 2026.04.30 ~ 2026.05.30
1. 프로젝트 개요
게임 소개
MonsterWorld는 Unreal Engine 5.6으로 제작한 3인칭 액션 RPG입니다.
플레이어는 대검, 한손검, 활 중 하나의 무기를 선택해 두꺼비, 전갈, 드래곤 등의 몬스터를 처치하며 퀘스트를 수행하고, 최종 보스를 쓰러뜨리는 것을 목표로 합니다.
🎬 전투 플레이 전체 흐름



개발 정보
항목 내용
| 개발 기간 | 2026년 4월 30일 ~ 2026년 5월 30일 |
| 개발 기간 요약 | 약 4주 |
| 참여 인원 | 5명 |
| 프로젝트 형태 | 원티드 4기 게임개발 언리얼 팀 프로젝트 |
개발 환경
항목 사용 기술
| 엔진 | Unreal Engine 5.6 |
| 언어 | C++ |
| 버전 관리 | Perforce |
| IDE | Rider / Visual Studio |
| AI | Chat Gpt, Claude |
| 정리 및 협업 | Obsidian, Trello, Figma |
현황 및 결과
- 두꺼비·전갈 몬스터 전투 루프 완성
- AI
- 피격 / 패링 / 사망
- VFX / SFX
- 퀘스트 수주 → 몬스터 처치 → 보스 포탈 진입 흐름 구축
- 팀 최종 발표 완료
주요 기능
- Behavior Tree 기반 몬스터 AI
- 감지
- 추적
- 공격
- 귀환
- 패링 / 스턴 / 피격 / 사망 상태 처리
- 아이템 드랍, 데미지 폰트, HP 경고 연출
- Dissolve 사망 이펙트 + 피격 플래시
- 전투 BGM 시스템
- 조우
- 사망
- 복귀
Niagara 사전 로드를 통한 성능 최적화
2. 기획 목표 및 협업 방식
기획 의도 및 목표
“실제로 몬스터와 싸우는 느낌이 드는 몬스터를 만들자.”
단순히 몬스터를 배치하는 것이 아니라, 전투 흐름이 자연스럽게 읽히도록 만드는 것이 목표였습니다.
몬스터가 플레이어를 인식하고, 추적하고, 공격하고, 맞으면 반응하고, 죽으면 녹아 사라지는 하나의 사이클이 플레이어에게 납득되는 수준이 되어야 한다고 생각했습니다.
개인 목표는 “버그 없는 전투 루프”였습니다.
눈에 보이는 기능보다 끊기지 않는 흐름이 더 중요하다고 판단했고, 그 기준으로 작업했습니다.
협업 방식
- Perforce로 파일 단위 충돌 관리 ( Perforce_ChangeList)
- Obsidian으로 현재 나의 작업 부분을 기록 (Obsidian Log)
- 두꺼비·전갈 몬스터 AI와 전투 시스템 전담
- 보스 드래곤, 플레이어 전투, UI, 맵은 다른 팀원이 담당
- ICombatInterface 등 공통 인터페이스를 팀이 함께 정의
- 각자의 영역은 독립적으로 구현
3. 아키텍처 및 워크플로우
아키텍처 특징 및 설계 의도
Behavior Tree + Blackboard
AI 상태를 코드가 아닌 Behavior Tree 그래프로 관리했습니다.
Idle → Detect → Chase → Attack → Beaten / Death
상태 흐름이 노드 단위로 분리되어 있어, 상태 추가나 수정 시 코드 전체를 건드리지 않아도 됩니다.
가장 좌측에 최우선순위 행동을 두고 우측에는 흔한 행동을 두어서 우선순위를 관리하였습니다. 예를 들어, 나머지 행동을 하다가도 Death 조건이 만족되면 현재 행동을 그만두고 바로 Death 상태로 들어가게 됩니다.

AnimNotifyState로 히트 윈도우 제어
공격 판정과 패리 윈도우를 AnimNotifyState로 구현했습니다.
- TriggerHitCheck
- ParryWindow
애니메이션 타임라인에 직접 판정 구간을 붙이는 방식이라, 타이밍 조정 시 애니메이션 편집만으로 해결할 수 있습니다.

ICombatInterface로 데미지 처리 표준화
플레이어든 몬스터든 피격 처리는 모두 ICombatInterface를 경유합니다. 이 인터페이스 클래스를 상속받는 클래스에서 AttackDamageCheck 함수와 RequestParry를 반드시 구현하게 하였습니다.
이를 통해 다음 처리가 한 곳에서 일관되게 이루어집니다.
- 방어력 계산
- 피격 연출
- 스턴 판정
게임 플레이 워크플로우
메인 메뉴
└─ 캐릭터 선택
├─ 대검
├─ 한손검
└─ 활
└─ 마을 진입
└─ NPC 퀘스트 수주
└─ 두꺼비 구역
└─ 전갈 구역
└─ 보스 포탈 진입
└─ 보스 드래곤 3페이즈
└─ 엔딩
4. 주요 작업
핵심 루프 구현 — 두꺼비 & 전갈 AI
두 몬스터 모두 같은 Behavior Tree 구조를 베이스로 두고, 각자의 패턴을 얹는 방식으로 설계했습니다.
공통 구조
Idle 순찰
└─ Detect 감지 범위 내 플레이어 탐지
└─ Chase 추적
└─ Attack 공격 패턴 실행
└─ Beaten / Stun / Death
└─ 홈 범위 이탈 시 귀환
두꺼비 특수 패턴
- 혓바닥 근거리 공격
- 독 투사체 범위 공격
- 점프 범위 공격
- 세 가지 패턴 랜덤 실행
- 점프 공격 시 AnimNotify로 이동 시점 제어
- 점프 공격 중 충돌 비활성화로 플레이어 끼임 방지


전갈 특수 패턴
- 집게 / 꼬리 / 독 범위 / 내려찍기 4가지 공격 랜덤 실행
- 독 공격
- 범위 내 5초간 유지
- 1초마다 틱 데미지
- 집게 충돌은 제거하되 데미지 판정은 유지
- 플레이어 끼임 방지 목적

두꺼비 AI 전투
- 플레이어 끼임 방지 목적
5. 피드백 및 HUD 구현
전투에서 피드백이 없으면 공격이 실제로 닿았는지 알기 어렵습니다.
그래서 시각·청각 피드백을 단계적으로 붙였습니다.
기능 설명
| 데미지 폰트 | 피격 시 피해량 수치가 3D 공간에 표시 |
| 피격 플래시 | 몬스터가 맞을 때 머티리얼 전체가 순간적으로 하얗게 번쩍임 |
| HP 50% 경고 | 체력이 절반 이하로 내려가면 빨간 플래시 3회 |
| 아이템 드랍 | 사망 애니메이션 완료 후 아이템 스폰 |
| 충돌 시 카메라 Shake | 몬스터와 무기가 충돌 할 때 카메라의 흔들림을 주어서 타격감 증가 |
| 무기 궤적 표시 | 무기를 휘두른 자리에 trail 효과를 주어서 궤적을 알아보기 쉽게 함 |
사망 Dissolve 연출
10초 후 단순히 Destroy 하는 방식 대신, 머티리얼 파라미터를 조절해 몸체가 서서히 녹아 사라지도록 만들었습니다.
두꺼비와 전갈 모두 해당 연출을 적용했습니다.

전투 BGM 시스템
- 몬스터가 플레이어를 처음 발견하고 Roar 하는 순간부터 전투 BGM 시작
- 사망 애니메이션이 끝난 뒤 마을 BGM으로 자연스럽게 전환
- Roar 재생 중에는 카메라 셰이크와 피격음 비활성화
6. 문제 해결 및 기술적 도전
이슈 1. 몬스터 추적이 버벅거리는 문제
상황
몬스터가 플레이어를 따라올 때 뚝뚝 끊기며 이동했습니다.
원인
MoveTo 태스크에서 Blackboard Key를 Object(Target Actor)로 지정했더니, 매 틱마다 Actor 위치를 다시 계산하는 오버헤드가 발생했습니다.
해결
Blackboard Key를 Vector(Target Location)로 변경하고, NavAcceleration과 OrientRotation 설정을 추가로 조정했습니다.
Orient Rotation To movement는 true
Use Controller Rotation Yaw는 false 해서 뚝뚝 끊기는 현상 해결
=> Use Controller Rotation Yaw를 끄면서
캐릭터가 Controller의 순간적인 방향 변경을 따라가지 않게 되었고,
Orient Rotation To Movement를 켜면서
실제 이동 방향 기준으로 MovementComponent가 부드럽게 회전하게 되었기 때문입니다.
결과
추적 움직임이 부드러워졌습니다.
추적 버벅거림 수정 전/후


7. 기술적 의사결정 기록
데미지 처리를 UGameplayStatics::ApplyDamage로 직접 하면 안 되나?
초기 구현에서는 몬스터가 플레이어에게 직접 ApplyDamage를 호출했습니다.
코드가 짧고 빠르다는 장점은 있었지만, 다음 문제가 있었습니다.
- 플레이어의 방어력이 반영되지 않음
- 피격 연출이 실행되지 않음
- 스턴 판정이 일관되게 처리되지 않음
그래서 ICombatInterface를 경유하도록 수정했습니다.
호출 경로가 한 단계 늘어나지만, 플레이어 전투 규칙이 모두 일관되게 동작합니다.
- 방어력 적용
- 상태 변화
- 연출 트리거
- 스턴 판정
팀 전체가 같은 인터페이스를 사용하므로, 나중에 새 몬스터를 추가할 때도 별도 예외 처리가 필요 없습니다.
8. 결과 및 회고
결과
- 두꺼비·전갈 몬스터 전투 루프 완성
- AI
- 피격 / 패링 / 사망
- VFX / SFX
- 퀘스트 수주 → 몬스터 처치 → 보스 포탈 진입까지 이어지는 흐름 구축
잘 된 점
기능을 만드는 것보다 “끊기지 않는 전투 루프”를 목표로 설정한 점이 좋았습니다.
추적 버벅거림, 몰림 현상, Collision 잔류처럼 눈에 잘 안 띄지만 플레이 감각을 망치는 문제를 계속 잡아낼 수 있었던 이유입니다.
아쉬운 점
- Behavior Tree가 복잡해질수록 디버깅이 어려웠습니다. 어떤 노드에서 어떤 조건으로 분기가 일어났는지 추적하는 데 시간이 많이 걸렸고, 초반에 Blackboard 설계를 더 꼼꼼히 했다면 중간에 Key 타입을 갈아엎는 일은 없었을 것 같습니다.
- 협업 측면에서는 공동 코드를 수정한 뒤 변경 내용을 충분히 기록하고 공유하지 못했던 점이 아쉬웠습니다. 같은 코드를 사용하는 팀원에게 영향을 줄 수 있는 부분이었지만, 수정 이유와 영향 범위를 명확히 전달하지 못해 오류가 발생한 경험이 있었습니다. 이 과정을 통해 팀 프로젝트에서 코드는 개인 작업물이 아니라 함께 관리하는 자산이며, 변경 사항을 꾸준히 공유하는 것도 개발자의 중요한 역량이라는 점을 배웠습니다. 또한 팀원 간 진행 상황 공유가 충분하지 않아 전체 일정이나 막힌 부분을 늦게 파악하는 경우도 있었습니다. 당시에는 제 작업을 마무리하는 데 집중했지만, 다음에는 팀원들의 진행 상황까지 더 적극적으로 확인하고 조율하는 태도가 필요하다고 느꼈습니다.
다음에 한다면
- BT 작업 전에 상태도를 먼저 그리고 시작할 것 같습니다. 코드보다 상태 전이 설계가 먼저여야 나중에 BT 수정이 쉬워진다는 것을 이번 프로젝트를 통해 직접 느꼈습니다.
- 사실 상 Trello나 Figma 같은 협업 도구를 처음에 사용하자고 논의는 되었지만 프로젝트를 진행 할 때 거의 사용되지 않았던 점이 아쉽습니다. 다음 프로젝트에서는 실제로 쓰일 수 있는 기능을 더 공부해서 협업에 용이하게 사용하고 싶습니다.
- 협업 방식에서는 Trello 같은 도구를 초반에만 사용하는 것이 아니라, 프로젝트가 끝날 때까지 꾸준히 활용하고 싶습니다. 해야 할 작업, 진행 중인 작업, 완료된 작업, 막힌 부분, 공동 코드 수정 사항을 매일 기록하면 팀원들이 서로의 상황을 더 쉽게 파악할 수 있을 것 같습니다. 다음 프로젝트에서는 단순히 “내가 어디까지 했는지”만 공유하는 것이 아니라, “어디서 막혔는지”, “누구의 도움이 필요한지”, “어떤 코드가 변경되었는지”까지 함께 공유하는 문화를 만들고 싶습니다. 이를 통해 불필요한 오해나 지연을 줄이고, 팀 전체가 더 안정적으로 움직일 수 있는 개발자가 되고 싶습니다.
'원티드 포텐업 게임개발 4기' 카테고리의 다른 글
| 4차 프로젝트 후기 (0) | 2026.05.31 |
|---|---|
| 3차 프로젝트 회고 (0) | 2026.04.13 |
| 2차 프로젝트 회고 (1) | 2026.03.15 |
| 1차 프로젝트 회고 (8) | 2026.02.13 |