언리얼 데미지 프레임워크와 죽음 처리 정리 (TakeDamage)
언리얼 데미지/죽음 처리 학습 노트. 강의 7.3~7.4에서 개념만 추림. 데미지 흐름이나 죽음 처리 헷갈릴 때 다시 보기.
TakeDamage() 데미지 프레임워크
감지된 액터에 데미지를 전달하는 표준 프레임워크. 핵심은 AActor::TakeDamage(). 공격자가 피격자의 TakeDamage()를 호출하는 구조.
인자 네 개:
- DamageAmount: 데미지 세기
- DamageEvent: 데미지 종류
- EventInstigator: 공격 명령 내린 컨트롤러
- DamageCauser: 데미지에 사용된 액터 (투사체, 무기 등)
피격 처리는 TakeDamage()를 override해서 구현. Super::TakeDamage()가 반환하는 값이 실제 적용된 데미지. 이걸 받아서 HP를 깎는 게 기본 패턴.
함정: bCanBeDamaged 속성
모든 액터에 CanBeDamaged 속성 있음. false면 전달된 데미지 결과가 전부 0이 되는 무적 상태. 데미지가 안 들어갈 때 이거부터 확인. (TakeDamage 로직 자체보다 이 속성 때문인 경우가 많음)
HP와 죽음 처리 흐름
기본 흐름:
- TakeDamage에서 CurrentHP를 FMath::Clamp로 0~MaxHP 범위에서 깎음
- HP가 0 근처면(KINDA_SMALL_NUMBER 비교) bIsDead = true 처리
- 죽으면 캡슐 컴포넌트 콜리전을 NoCollision으로, MovementMode를 None으로 → 시체가 충돌/이동 안 하게
함정: HP 비교를 == 0으로 하지 말 것. 부동소수점이라 정확히 0 안 될 수 있음. KINDA_SMALL_NUMBER(0.0001f) 미만으로 비교.
죽음 → 애니메이션 → 정리의 타이밍 문제
죽자마자 액터를 바로 Destroy하면 죽는 애니메이션이 안 나옴. 그래서 애니메이션 노티파이를 거치는 구조를 씀.
흐름:
- 죽음 판정 → 죽는 애니메이션 재생
- 애니메이션 타임라인 특정 시점에 노티파이(PostDead) 배치
- 노티파이 → 델리게이트 브로드캐스트 → 캐릭터가 받아서 SetLifeSpan으로 잠시 후 제거
핵심은 "죽음 판정"과 "액터 제거"를 분리하고, 그 사이를 애니메이션 노티파이가 잇는다는 것. 애님 인스턴스에서 AnimNotify_함수명 규칙으로 노티파이 함수 선언하면 타임라인 노티파이와 연결됨.
죽는 애니메이션 자체는 AnimGraph에서 Blend Poses by bool로 bIsDead 분기. 애님 인스턴스의 NativeUpdateAnimation에서 캐릭터의 IsDead()를 매 프레임 동기화.
상자(트리거) 액터에서 다시 볼 패턴
7.4 상자 실습에서 개념적으로 기억할 것만:
트리거 박스 기본 구성: BoxComponent를 루트로, OnComponentBeginOverlap 델리게이트에 함수 바인드, 콜리전 프리셋은 Trigger 또는 전용 프리셋. 메시는 NoCollision(보여주기만), 박스가 감지 담당. 역할 분리가 포인트.
이펙트 후 자기 제거 패턴: 오버랩 발생 → 파티클 Activate + 메시 숨김 + 콜리전 끄기 → 파티클의 OnSystemFinished 델리게이트에 Destroy 바인드. 즉 "이펙트가 끝나면 사라진다"를 델리게이트 체인으로 연결. 죽음 처리에서 본 "이벤트가 끝나는 시점을 노티파이/델리게이트로 잡아서 제거"와 같은 패턴.
전용 콜리전 프리셋 만들 때: 박스는 Query Only(물리 반응 필요 없음, 감지만), Object Type은 전용 채널, 캐릭터 채널과만 Overlap 지정. 양쪽 프리셋 모두에서 서로를 Overlap으로 잡아줘야 이벤트 발생(앞 글의 "양쪽 다 설정해야 한다" 함정과 동일).
관통하는 핵심
이번 절 전체를 관통하는 패턴 하나: "어떤 동작의 종료 시점"을 직접 타이밍 재서 처리하지 말고, 애니메이션 노티파이나 델리게이트(OnSystemFinished 등)로 잡아서 다음 동작을 잇는다. 죽음 처리도, 상자 소멸도 같은 구조. 이걸 기억해두면 비슷한 상황에서 바로 응용 가능.
'학습 > Unreal' 카테고리의 다른 글
| 언리얼 Behavior Tree 노드 구현 핵심과 함정 (BTTask, Service, Decorator) (0) | 2026.05.16 |
|---|---|
| 언리얼 AI 기초 정리 (AIController, Behavior Tree, Blackboard) (0) | 2026.05.16 |
| 언리얼 충돌 시스템 핵심 정리 (콜리전 프리셋, 트레이싱) (0) | 2026.05.16 |
| 언리얼 애니메이션 시스템 정리 (AnimInstance, State Machine, Montage, Notify) (0) | 2026.05.06 |
| 언리얼 Character와 시점 구현 정리 (Enhanced Input, Control Rotation, BackView/QuarterView) (0) | 2026.05.01 |
