[2026_01_06] 비대칭 디버깅(같은 로직인데 한 쪽에서만 작동)
2026. 1. 6. 20:54ㆍTIL
문제 상황
- 적군 힐러는 정상적으로 힐을 하는데, 아군 힐러만 힐을 하지 못함
- 같은 로직(HealSkill, UnitBase, AttackState)을 사용하는데 아군만 특이하게 작동하지 않음
- 아군 검색, 리스트 정렬, 스킬 쿨타임은 모두 정상 작동 확인
시도한 방법
- FindAlliesInRadius 의심: 아군을 제대로 찾는지 확인 → 정상 작동
- 정렬 문제 의심: SortTargetsByPriority가 매번 다른 타겟을 선택하는지 확인 → targetPriority 설정 확인됨
- Heal 메서드 의심: UnitBase.Heal()이 실제로 호출되는지 확인 → 호출은 되는데 적용 안 됨
- 죽은 유닛 필터링: 이미 죽은 유닛을 리스트에서 제거 → 여전히 문제 지속
- AttackState 실행 순서 확인: Attack()과 TryUseSkill()의 순서 의심
해결 방법
AttackState.cs의 공격 타이밍 로직 수정
csharp
// 문제 코드
if (attackTimer >= 1f / attackSpeed)
{
attackTimer = 0f;
Attack(); // ① 일반 공격 먼저 실행
unit.TryUseSkill(); // ② 스킬 나중 실행
}
// 해결 코드
if (attackTimer >= 1f / attackSpeed)
{
attackTimer = 0f;
unit.TryUseSkill(); // ① 스킬 먼저 실행
if (unit.CurAtk > 0) // ② 공격력 있을 때만 공격
{
Attack();
}
}
배운 점
- 실행 순서의 중요성: 같은 함수들이라도 호출 순서에 따라 동작이 달라질 수 있음. Attack()이 먼저 실행되면서 애니메이션/IsUsingSkill 플래그가 TryUseSkill()을 블로킹함
- 비대칭 디버깅: 같은 로직인데 한쪽만 작동하지 않으면 "타이밍"이나 "실행 순서" 문제를 의심해야 함
- 조건 체크의 중요성: 공격력이 0인 유닛(힐러, 버퍼)은 일반 공격을 스킵해야 불필요한 처리와 충돌을 방지할 수 있음
- 상태 충돌 주의: 여러 행동(공격, 스킬, 애니메이션)이 동시에 실행될 때 상태 플래그로 인한 충돌 가능성을 고려해야 함
'TIL' 카테고리의 다른 글
| [2026_01_08] 버프/디버프 적용 시 실제 적용값(appliedValue) 저장 (0) | 2026.01.08 |
|---|---|
| [2026_01_07] Unity UI Mask를 활용한 역마스크(Cutout Mask) (0) | 2026.01.07 |
| [2026_01_02] 중간 발표 (0) | 2026.01.02 |
| [2025_12_31] Unity 게임 배속 증가 시 Projectile 충돌 감지 실패 해결 (1) | 2025.12.31 |
| [2025_12_30] Unity UI 이벤트 구독/해제 (0) | 2025.12.30 |