Unreal 게임 개발 과정 TIL

Today's I Learning

2026/07 7

07.16 Unreal 본캠프) C++를 활용한 아이템 상속 설계와 투사체 무브먼트 연동

📌 오늘 공부한 내용C++ 기반 아이템 공통 부모 클래스 설계 (AJ_ItemBase)차징 데미지 반영을 위한 C++ 화살 투사체 클래스 구현 (AJ_ProjectileBase)1. 아이템 공통 부모 클래스 설계 (AJ_ItemBase)💡 배경 및 목적기존에는 체력 팩, 총알 상자 등 개별 아이템마다 오버랩 충돌 감지 및 소멸 로직을 블루프린트로 중복 구현해야 하는 비효율이 있었다.이를 해결하기 위해 C++ 기반의 공통 부모 클래스를 설계하여 재사용성과 확장성을 높였다.🛠️ 구현 핵심아이템 타입 구분: UENUM으로 EItemType을 정의하여 Health, Ammo 등의 타입을 C++에서 선택할 수 있도록 구성했다.컴포넌트 초기화: C++에서 USphereComponent(충돌체), UStatic..

본캠프 TIL 2026.07.16

07.15 Unreal 본캠프) UI/C++ 상태 관리 및 최적화 트러블슈팅

💡 오늘의 핵심 배움 (Key Takeaways)위젯 모듈화: 설정 창(Settings)을 독립된 위젯으로 분리하여 재사용성과 유지보수성 향상입력 시스템 이해: Enhanced Input의 Started vs Triggered 차이 이해 및 일시정지(Paused) 상태에서의 입력 제어디커플링(Decoupling): C++ 델리게이트(Delegate)를 활용한 데이터(HP/Ammo)와 UI(HUD)의 완벽한 동기화1. 모듈화된 설정 창(Settings UI) 및 볼륨 저장 시스템 구축🛠️ 구조 설계 및 기능 구현독립된 위젯 모듈화: 일시정지 메뉴 위젯 안에 모든 설정 요소를 하드코딩하지 않고, WBP_Settings라는 독립된 위젯으로 분리함. 이를 통해 향후 메인 메뉴 등 다른 UI에서도 설정 창을 ..

본캠프 TIL 2026.07.15

07.13 Unreal 본캠프) 일시정지 메뉴 연동 및 카메라 연출

🛠️ 트러블슈팅 (Troubleshooting)- 향상된 입력(Enhanced Input) 일시정지 토글 버그 수정Issue 1 (실행 불가): 에디터 디테일 패널 버그로 인해 노드에서 "Execute when Paused" 옵션 체크가 불가능한 현상 발생.Solution 1: 우회법으로 입력 에셋인 IA_Pause 파일을 직접 열고, 세팅에서 Trigger When Paused 옵션을 활성화하여 게임이 멈춘 상태에서도 입력이 먹히도록 해결함.Issue 2 (메뉴 깜빡임): IA_Pause 노드의 Triggered 핀을 사용했더니 키를 누르고 있는 동안 매 프레임 이벤트가 중복 실행되어 메뉴가 미친 듯이 켜지고 꺼지는 버그 발생.Solution 2: 키를 누르는 순간 단 한 번만 실행되는 Started..

본캠프 TIL 2026.07.13

07.09 Unreal 본캠프) 랜드스케이프(지형) 크기 줄이고 잘라내는 방법

팀 프로젝트 작업 중, 맵의 크기가 매우 커서 축소를 하기 위한 방법을 공부했다. 언리얼 엔진에서 맵 크기를 줄이는 것은 크게 물리적인 지형 면적을 잘라내는 방법과 데이터 부담을 줄이는 최적화로 나눌 수 있다. 오늘은 랜드스케이프 모드를 활용해 물리적인 맵 크기를 줄이는 방법을 학습했다. 1. 불필요한 외곽 지형 잘라내기 (컴포넌트 단위 삭제) : 랜드스케이프가 너무 넓게 생성되었거나, 사용하지 않는 외곽 지역을 물리적으로 제거하여 맵의 면적을 줄이는 방법이다.1️⃣ 에디터 좌측 상단의 모드 드롭다운을 클릭해 랜드스케이프 모드(Shift + 2)로 진입한다.2️⃣ 좌측 상단에서 관리(Manage) 탭을 선택한다.3️⃣ 활성화된 툴 목록 중에서 삭제(Delete) 브러시를 클릭한다.4️⃣ 뷰포트에서 지우고..

본캠프 TIL 2026.07.09

07.08 Unreal 본캠프) 잠입 액션 시스템 설계와 객체 지향적 의사결정

오늘은 무기 시스템의 뼈대를 완성한 후, 이를 실제 게임 로직(잠입/전투)과 연결하는 과정에서 소프트웨어 설계적 선택을 내리는 데 집중했다.단순히 기능이 돌아가는 코드를 짜는 것을 넘어, '이 게임에 맞는 최적의 구조가 무엇인가'를 고민한 흔적을 정리한다.1. 피아 식별 (팀킬 방지) 로직 구현 : 언리얼 태그(Tag) 시스템 활용 : 몬스터와 플레이어 같이 사용할 SwordBase를 만드는 과정 중 몬스터의 공격이 같은 몬스터를 때리는 일이 일어날 것을 예측했다. 이를 제어하기 위해 언리얼 엔진의 Actor Tag 시스템을 도입했다. - 실행 흐름충돌 발생 : 무기의 CollisionBox에 OtherActor가 오버랩됨.소유자 확인 : GetOwner()를 통해 이 무기를 휘두른 주체가 누구인지 ..

본캠프 TIL 2026.07.08

07.07 Unreal 본캠프) Data Asset으로 재구성

초기 무기 시스템으로 AWeaponBase 클래스 내부에 데미지, 쿨타임 등의 변수를 직접 선언하고 관리하는 구조였다.처음에는 직관적이고 편해 보였지만, 프로젝트가 다음과 같은 치명적인 문제들이 발생했다.클래스 증식 (Class Explosion) : '나무 활', '철 활', '마법 활' 등을 만들려면 BowBase를 상속받는 자식 블루프린트를 계속해서 새로 만들어야 했다. 무기가 100개면 100개의 블루프린트가 필요해지는 끔찍한 구조였다.메모리 낭비 : 고블린 100마리가 같은 '철검'을 들고 스폰되면, 100개의 무기 액터가 각자 데미지와 이펙트 변수를 메모리에 개별적으로 들고 있는 비효율이 발생했다.협업의 불편함 : 기획자가 데미지 수치나 효과음을 바꾸려면 프로그래머가 만든 블루프린트를 직접 열..

본캠프 TIL 2026.07.07

07.03 Unreal 본캠프) CH3 팀 프로젝트 시작

이전까지 배운 내용을 바탕으로 팀 프로젝트 협업을 시작했다. 이번 프로젝트에선 팀장이라는 직위와 전투 로직 설계라는 역할을 맡게 되었다. 기획한 게임의 장르는 잠입 슈팅 게임이며 조선 시대를 배경으로 적들에게 최대한 들키지 않고 적들을 모두 죽이는 것이다. - 전투 로직 기본 틀기본적인 틀로는 캐릭터 클래스에서 전부 해결하는 것이 아닌 컴포넌트를 기반으로 설계하였다.UCombatComponent라는 UActorComponent를 생성하여 전투 시스템을 분리하여 입력을 컴포넌트로 전달하고, 컴포넌트는 다시 무기로 명령을 위임하는 역할 분담 체계를 확립하였다. - 동작 흐름입력 : 플레이어가 마우스 왼쪽 버튼을 클릭한다.전달 : 캐릭터는 자신이 어떤 무기를 들고 있는지 모른 채 CombatComponent-..

본캠프 TIL 2026.07.03