Scope-04 마지막 캐릭터 상호작용 상세 설명

이 페이지는 의뢰자가 마지막 캐릭터 상호작용 구간을 에디터에서 직접 따라 보면서 이해할 수 있도록, 실제 확인 기준 블루프린트와 함수 흐름을 순서대로 풀어쓴 문서입니다.

핵심은 단순히 공격 애니메이션이 재생되는지 보는 것이 아니라, 공격 가능 거리 진입 -> 공격 상태 전환 -> 무기 충돌 활성화 -> Apply Damage -> HP 감소 -> 사망/후속 UI가 한 사이클로 연결되어 있는지를 이해하는 것입니다.

먼저 보면 좋은 전체 흐름

아래 다이어그램은 마지막 전투의 왕복 구조를 한눈에 보기 위한 요약입니다.

flowchart TD A[플레이어 진입] --> B[Attack_Range Begin Overlap] B --> C[Troll Attack true] C --> D[적 공격 몽타주 재생] D --> E[WeaponCollisionOnOff] E --> F[SwordCapsule 활성화] F --> G[Apply Damage to Player] G --> H[Player Event AnyDamage] H --> I[CurrentHealth 감소] I --> J[HUD 갱신] K[플레이어 공격 입력] --> L[AC_Combat 몽타주 선택] L --> M[플레이어 WeaponCollisionOnOff] M --> N[플레이어 무기 충돌 활성화] N --> O[Apply Damage to Demon_Enemy] O --> P[Demon OnTakeAnyDamage_Event] P --> Q[CurrentHP 감소] Q --> R{HP <= 0} R -- 예 --> S[Death] S --> T[YouWin_UMG 표시]

1) 적이 플레이어를 때리는 흐름

  1. Demon_EnemyPawnSensing -> On See Pawn으로 플레이어를 감지합니다.
  2. 플레이어가 Attack_Range 안으로 들어오면 On Component Begin Overlap (Attack_Range)에서 Cast To CBP_SandboxCharacter_Metahuman_Kellan이 성공하고 Troll Attacktrue로 바뀝니다.
  3. 적 공격 몽타주가 재생되는 타이밍에 Event WeaponCollisionOnOff가 호출되어 SwordCapsule 충돌이 잠깐 켜집니다.
  4. 그 짧은 공격 구간 안에서 On Component Begin Overlap (SwordCapsule)이 플레이어와 겹치면 Apply Damage가 호출됩니다.
  5. 플레이어 블루프린트 CBP_SandboxCharacter_Metahuman_KellanEvent AnyDamage가 이를 받아 CurrentHealth를 줄이고, 필요하면 Death와 HUD 갱신까지 이어집니다.

2) 플레이어가 적을 때리는 흐름

  1. 플레이어 쪽 공격 입력과 콤보 몽타주 선택은 AC_Combat가 담당합니다.
  2. 플레이어 공격 애니메이션 중 Event WeaponCollisionOnOff가 호출되면 플레이어 무기 충돌이 잠깐 활성화됩니다.
  3. 이 시점에 적과 겹치면 플레이어 쪽 Apply Damage가 실행되어 Demon_Enemy로 데미지가 전달됩니다.
  4. Demon_EnemyAssign On Take Any Damage로 연결된 OnTakeAnyDamage_Event에서 데미지를 받아 CurrentHP를 깎습니다.
  5. HP가 0 이하가 되면 Death 이벤트가 실행되고, 최종적으로 YouWin_UMG까지 이어집니다.

즉, 마지막 전투는 적과 플레이어가 서로 비슷한 구조를 공유합니다. 둘 다 무기 충돌을 특정 프레임에만 켠 뒤 Apply Damage를 통해 상대의 데미지 이벤트로 넘기고, 그쪽 블루프린트에서 실제 체력 감소와 사망 처리를 담당합니다.

Demon_Enemy에서 봐야 할 핵심 흐름

BeginPlay

  • CurrentHPMaxHP와 맞춰 전투 시작 시 체력 기준값을 초기화합니다.
  • 이어서 Assign On Take Any Damage를 연결해 적이 외부에서 받는 데미지를 OnTakeAnyDamage_Event에서 일괄 처리하도록 묶습니다.

이 구간이 필요한 이유는, 플레이어 공격이 들어와도 적이 어디서 HP를 깎아야 하는지 수신 지점이 정리되어 있어야 하기 때문입니다.

OnTakeAnyDamage_Event

  • 이 이벤트는 적이 실제로 맞았을 때 실행되는 본체입니다.
  • 먼저 생존 가능 여부를 분기로 나눕니다.
  • 아직 살아 있으면 CurrentHP - Damage 결과를 다시 Set CurrentHP로 저장합니다.
  • 더 버틸 수 없으면 CurrentHP0으로 맞춘 뒤 Death로 넘깁니다.

의뢰자 입장에서는 이 노드를 실제 적 체력 감소가 반영되는 핵심 지점으로 보면 됩니다.

PawnSensing -> On See Pawn

  • 적이 플레이어를 발견하고 추적을 시작하는 진입점입니다.
  • 일반적으로 이 앞에는 bIsDead 같은 생존 상태 체크가 있어서, 이미 죽은 적이 추적이나 공격 로직에 다시 들어가지 않도록 막습니다.
  • 감지 대상이 유효하면 그 Pawn을 기준으로 움직임과 공격 준비가 이어집니다.

이 노드는 적이 전투 모드에 들어가는 입구라고 이해하면 됩니다.

On Component Begin Overlap (Attack_Range) / On Component End Overlap (Attack_Range)

flowchart TD A[PawnSensing: On See Pawn] --> B[Attack_Range Begin Overlap] B --> C[Cast To Player] C --> D[Set Troll Attack true] D --> E[Is Any Montage Playing?] E --> F[Attack Number 선택] F --> G[Montages 배열에서 공격 선택] G --> H[Play Montage] H --> I[WeaponCollisionOnOff] I --> J[SwordCapsule 활성화] J --> K[SwordCapsule Begin Overlap] K --> L[Apply Damage] L --> M[Set Collision Enabled: NoCollision] N[Attack_Range End Overlap] --> O[Set Troll Attack false]
  • Attack_Range는 적이 플레이어를 실제로 공격할 거리 안에 있는지 판정하는 범위입니다.
  • 플레이어가 들어오면 Cast To CBP_SandboxCharacter_Metahuman_Kellan 성공 후 Set Troll Attack = true가 되어 공격 가능 상태가 켜집니다.
  • 반대로 플레이어가 빠져나가면 Set Troll Attack = false로 돌아가 공격 루프가 멈춥니다.

PawnSensing이 추적 시작이라면, Attack_Range는 실제 공격 개시 허가에 가깝습니다.

공격 몽타주 선택과 반복 공격 구간

  • 스크린샷 기준으로 Is Any Montage Playing 분기 뒤에 Random Integer in Range, Montages 배열, Play Montage가 연결되어 있습니다.
  • 여기서는 Attack Number를 0~2 범위에서 고르고, Montages 배열에서 해당 공격 몽타주를 가져와 재생합니다.
  • 이후 DelayRandom Float in Range가 이어져 있어, 플레이어가 여전히 공격 가능 범위 안에 있으면 다음 공격을 다시 준비하는 구조입니다.

이 구간은 어떤 공격 모션을 쓸지 고르고, 한 번 끝나면 조건이 유지되는 동안 다시 공격하도록 만든 반복 제어 구간입니다.

Event WeaponCollisionOnOff

  • 이 이벤트는 적 공격 애니메이션의 특정 프레임에 맞춰 SwordCapsule 충돌을 켜거나 끄는 역할을 합니다.
  • 공격 애니메이션 전체 시간 동안 충돌을 계속 켜 두지 않고, 칼이 실제로 지나가는 짧은 프레임에만 활성화합니다.
  • 이렇게 해야 공격이 빗나갔을 때는 데미지가 안 들어가고, 한 번 맞았을 때도 여러 번 중복으로 들어가는 문제를 줄일 수 있습니다.

즉, 이 이벤트는 공격 모션을 실제 판정으로 바꾸는 연결 장치입니다.

On Component Begin Overlap (SwordCapsule)

  • 적 검 충돌이 켜진 상태에서 플레이어와 겹치면 실행됩니다.
  • Cast To CBP_SandboxCharacter_Metahuman_Kellan이 성공하면 Apply Damage를 호출합니다.
  • 스크린샷 기준 Base Damage1.0이고, Damage Causer는 적 자신(self)입니다.
  • 바로 뒤에서 Set Collision EnabledSwordCapsule을 다시 No Collision으로 돌립니다.

이 노드는 실제 타격 확정 지점입니다. 적 공격이 실제 플레이어 HP 감소로 이어지는 마지막 직전 노드가 바로 이 부분입니다.

Death

  • 적 체력이 다 떨어졌을 때 호출되는 종착점입니다.
  • 먼저 bIsDead를 갱신해 이후 로직이 중복 실행되지 않게 막습니다.
  • 이후 실행 중인 공격 상태를 정리하고, 사망 연출을 재생하고, 딜레이 뒤 YouWin_UMGCreate Widget -> Add to Viewport로 띄우는 흐름이 이어집니다.

즉, Scope-04는 적을 맞히는 것까지만이 아니라, 마지막 승리 UI까지 도달해야 완성입니다.

CBP_SandboxCharacter_Metahuman_Kellan에서 봐야 할 핵심 흐름

flowchart TD A[적의 Apply Damage] --> B[Player Event AnyDamage] B --> C[DecrescentHealth] C --> D[Set CurrentHealth] D --> E{CurrentHealth <= 0} E -- 아니오 --> F[REFRESH HUD] F --> G[PlayerHealthBar Set Percent] E -- 예 --> H[Death] H --> I[사망 몽타주 재생]

Event AnyDamage

  • 적의 Apply Damage가 성공하면 플레이어는 이 이벤트에서 결과를 받습니다.
  • 따라서 플레이어 피격 처리의 시작점은 적 블루프린트가 아니라 플레이어 자신의 Event AnyDamage입니다.

이 구조를 이해하면, 적이 아무리 공격 애니메이션을 재생해도 플레이어 쪽 Event AnyDamage가 제대로 이어지지 않으면 HP 감소가 안 보이는 이유를 쉽게 이해할 수 있습니다.

DecrescentHealth / Set CurrentHealth

  • 플레이어는 받은 Damage를 바탕으로 CurrentHealth - Damage를 계산합니다.
  • 그 값을 다시 Set CurrentHealth로 저장해 실제 플레이어 체력 변수에 반영합니다.

여기는 타격 연출이 아니라 실수치 반영을 담당하는 부분입니다.

생존 분기와 Death

  • 체력 감소 후 남은 HP를 기준으로 생존 여부를 나눕니다.
  • 0 이하가 되면 Death가 호출되고, Play Anim Montage로 사망 몽타주가 재생됩니다.
  • 현재 문서 기준으로는 Falling_Back_Death__1__Anim_Montage가 연결된 상태를 확인했습니다.

이 구간 덕분에 플레이어 피격은 단순 수치 감소로 끝나지 않고, 실제 사망 연출까지 이어집니다.

REFRESH HUD / Set Percent

  • 체력이 바뀐 뒤에는 WBP_PlayerUIPlayerHealthBar를 다시 갱신합니다.
  • 즉, 플레이어 피격은 내부 변수만 줄어드는 것이 아니라 UI 퍼센트까지 함께 바뀌도록 묶여 있습니다.

전투가 정상이라는 것은 캐릭터 변수뿐 아니라 UI 반영까지 한 사이클로 이어진다는 뜻입니다.

플레이어의 공격 판정 구간

  • 플레이어도 적과 비슷하게 Event WeaponCollisionOnOff, 무기 충돌, Apply Damage 흐름을 사용합니다.
  • 공격 애니메이션 타이밍에 플레이어 무기 충돌을 잠깐 켜고, 적과 겹치면 Apply Damage로 데미지를 넘깁니다.
  • 이후 다시 Set Collision Enabled로 충돌을 꺼서 한 번의 공격에서 중복 히트를 막습니다.

따라서 Scope-04를 이해하려면, 플레이어는 적과 대칭 구조로 공격 판정을 쓰고 있다는 점을 같이 보는 것이 좋습니다.

AC_Combat의 역할

  • AC_Combat는 마지막 전투 전체의 HP 계산 주체는 아닙니다.
  • 대신 Left Mouse Button 입력, ComboCounter, Select, Play Montage, Retriggerable Delay 같은 흐름으로 어떤 공격 몽타주를 언제 재생할지 정리합니다.

쉽게 말해 AC_Combat는 공격 입력과 재생 제어를 담당하고, 실제 HP 감소는 그 뒤 무기 충돌과 Apply Damage, 그리고 상대 블루프린트의 데미지 이벤트에서 처리됩니다.

ABP_Demon_Copy의 역할

  • ABP_Demon_Copy는 현재 구조상 전투 판정의 본체라기보다 표현 레이어에 가깝습니다.
  • 문서 기준으로 확인한 EventGraph는 Event Blueprint Update Animation -> Try Get Pawn Owner -> Cast To Demon_Enemy 수준으로 단순합니다.
  • AnimGraph도 State Machine -> DefaultSlot -> Output Pose 중심 구조입니다.

즉, ABP_Demon_Copy는 실제 전투 허가나 HP 계산이 아니라 애니메이션 표현을 담당합니다. 실제 공격 허가, 무기 충돌, HP 감소, 사망 판정 같은 핵심은 Demon_Enemy 본체에서 보는 것이 맞습니다.

에디터에서 확인할 때 추천 순서

  1. Demon_Enemy에서 Attack_Range, SwordCapsule, Apply Damage, OnTakeAnyDamage_Event, Death를 먼저 확인합니다.
  2. 같은 블루프린트에서 Montages 배열과 Play Montage 재생 분기를 봅니다.
  3. CBP_SandboxCharacter_Metahuman_Kellan에서 Event AnyDamage, DecrescentHealth, REFRESH HUD, 플레이어 무기 충돌 흐름을 확인합니다.
  4. AC_Combat에서 공격 입력과 콤보 몽타주 선택 흐름을 확인합니다.
  5. 마지막으로 ABP_Demon_Copy를 열어 표현 레이어가 얇게 유지된 구조를 확인합니다.

이 순서로 보면 마지막 캐릭터 상호작용이 실제로 어떻게 데미지가 오가고 전투가 끝나는지 흐름 단위로 이해하기가 훨씬 쉬워집니다.