Unreal 게임 개발 과정 TIL

Today's I Learning

본캠프 TIL

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

Sunlight__ 2026. 7. 16. 21:00

📌 오늘 공부한 내용

  1. C++ 기반 아이템 공통 부모 클래스 설계 (AJ_ItemBase)
  2. 차징 데미지 반영을 위한 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 값을 조정하여 자연스러운 포물선 비행 궤적을 구현했다.
  • 데미지 주입 로직 연동:
    1. 활 클래스(ABowBase::EndAttack)에서 화살을 스폰한다.
    2. 스폰 직후 Cast<AJ_ProjectileBase>를 통해 화살 객체로 형변환한다.
    3. 차징 시간에 비례해 계산된 FinalDamage를 화살의 SetDamage() 함수를 통해 직접 주입하여 데미지 연동을 완료했다.

🚨 트러블슈팅 (Troubleshooting)

🔥 에러 현상: 투사체 무브먼트 멤버 변수 참조 에러

  • 빌드 중 MaxSpeedbRotationFollowsVelocity가 '선언되지 않은 식별자'라는 에러가 발생했다.

🔍 원인 파악

  1. 문법 오류: 포인터 변수의 멤버에 접근할 때 포인터 접근 연산자(->)를 써야 하는데, 대입 연산자(=)를 잘못 작성한 오타가 원인이었다.
  2. 헤더 누락: 투사체 컴포넌트 사용을 위한 헤더 파일 인클루드가 누락되어 있었다.

  • 오타를 -> 연산자로 교정하고, 상단에 #include "GameFramework/ProjectileMovementComponent.h"를 확실하게 추가하여 정상적으로 빌드에 성공했다.
  • C++ 개발 시 포인터 문법과 헤더 참조를 꼼꼼히 확인해야 함을 다시 한번 상기했다.