📌 오늘 공부한 내용
- C++ 기반 아이템 공통 부모 클래스 설계 (AJ_ItemBase)
- 차징 데미지 반영을 위한 C++ 화살 투사체 클래스 구현 (AJ_ProjectileBase)
1. 아이템 공통 부모 클래스 설계 (AJ_ItemBase)
💡 배경 및 목적
- 기존에는 체력 팩, 총알 상자 등 개별 아이템마다 오버랩 충돌 감지 및 소멸 로직을 블루프린트로 중복 구현해야 하는 비효율이 있었다.
- 이를 해결하기 위해 C++ 기반의 공통 부모 클래스를 설계하여 재사용성과 확장성을 높였다.
🛠️ 구현 핵심
- 아이템 타입 구분: UENUM으로 EItemType을 정의하여 Health, Ammo 등의 타입을 C++에서 선택할 수 있도록 구성했다.
- 컴포넌트 초기화: C++에서 USphereComponent(충돌체), UStaticMeshComponent(외형 메쉬), URotatingMovementComponent(회전 연출)를 생성해 아이템의 기본 뼈대를 구축했다.
- 동적 분기 처리: 플레이어와 아이템 충돌 시 타입에 따라 분기하여 동작하도록 설계했다.
- Health: 플레이어 캐릭터의 Heal() 함수 호출
- Ammo: 게임모드의 AddAmmo() 함수 호출

✨ 결과 및 인사이트 (C++ & BP 분리)
- 무거운 오버랩 감지 및 연동 로직은 C++ 백엔드에서 일괄 처리하고, 블루프린트 에디터에서는 메쉬, 이펙트, 사운드 등 시각/청각적 스타일링만 담당하도록 역할을 분리했다.
- 결과적으로 프로젝트의 확장성과 유지보수성이 크게 증가했다.
2. 차징 데미지 동적 반영을 위한 화살 발사체 구현 (AJ_ProjectileBase)
💡 배경 및 목적
- 활 공격 시 마우스 클릭 유지 시간(차징 시간)에 비례하여 동적으로 변하는 최종 데미지를 화살에 부여하기 위해, AActor 기반의 발사체 클래스를 제작했다.
🛠️ 구현 핵심
- 물리 연출 (UProjectileMovementComponent): InitialSpeed, MaxSpeed, ProjectileGravityScale 값을 조정하여 자연스러운 포물선 비행 궤적을 구현했다.
- 데미지 주입 로직 연동:
- 활 클래스(ABowBase::EndAttack)에서 화살을 스폰한다.
- 스폰 직후 Cast<AJ_ProjectileBase>를 통해 화살 객체로 형변환한다.
- 차징 시간에 비례해 계산된 FinalDamage를 화살의 SetDamage() 함수를 통해 직접 주입하여 데미지 연동을 완료했다.
🚨 트러블슈팅 (Troubleshooting)
🔥 에러 현상: 투사체 무브먼트 멤버 변수 참조 에러
- 빌드 중 MaxSpeed와 bRotationFollowsVelocity가 '선언되지 않은 식별자'라는 에러가 발생했다.
🔍 원인 파악
- 문법 오류: 포인터 변수의 멤버에 접근할 때 포인터 접근 연산자(->)를 써야 하는데, 대입 연산자(=)를 잘못 작성한 오타가 원인이었다.
- 헤더 누락: 투사체 컴포넌트 사용을 위한 헤더 파일 인클루드가 누락되어 있었다.


- 오타를 -> 연산자로 교정하고, 상단에 #include "GameFramework/ProjectileMovementComponent.h"를 확실하게 추가하여 정상적으로 빌드에 성공했다.
- C++ 개발 시 포인터 문법과 헤더 참조를 꼼꼼히 확인해야 함을 다시 한번 상기했다.
'본캠프 TIL' 카테고리의 다른 글
| 07.15 Unreal 본캠프) UI/C++ 상태 관리 및 최적화 트러블슈팅 (0) | 2026.07.15 |
|---|---|
| 07.13 Unreal 본캠프) 일시정지 메뉴 연동 및 카메라 연출 (0) | 2026.07.13 |
| 07.09 Unreal 본캠프) 랜드스케이프(지형) 크기 줄이고 잘라내는 방법 (0) | 2026.07.09 |
| 07.08 Unreal 본캠프) 잠입 액션 시스템 설계와 객체 지향적 의사결정 (0) | 2026.07.08 |
| 07.07 Unreal 본캠프) Data Asset으로 재구성 (0) | 2026.07.07 |