코딩의 신 68

김동관·2026년 1월 12일
post-thumbnail

오늘 한 일

트러블 슈팅 해결

문제 발생

기존 튜토리얼 고블린 3마리는 스킬을 맞았지만 다른 월드에 있는 고블린은 스킬을 맞지 않는 상태.

  • 레이어를 빠뜨렸나? x

  • 스크립트나 변수창에 빠진게 있나? x

  • 컷씬 튜토리얼 부분에서 이동 로직이 이상해졌나? x

  • 디버그를 찍어보자.

“스킬이 안 맞았던” 이유 (월드 고블린만 안 맞음)

원인: OverlapSphere는 맞췄는데, 데미지 스크립트를 못 찾았음

스킬 코드는 대략 이런 식:

OverlapSphere로 콜라이더들을 찾는다

그 다음 root.GetComponentInChildren() 또는 SendMessage 같은 걸로 데미지 적용한다.

문제는 월드 고블린 프리팹 구조가 튜토리얼 고블린이랑 달라서, OverlapSphere에 잡히는 콜라이더(예: 몸통/무기/자식 Hitbox)의 root가 “데미지 스크립트가 붙은 오브젝트”가 아니었던 것.

즉, 튜토리얼 고블린: root 쪽에 IAoeDamageable이 있어서 맞음. 월드 고블린: IAoeDamageable이 부모/다른 루트에 있어서 root/inChildren 탐색이 빗나감 → “안 맞는 것처럼 보임”
col.GetComponentInParent()로 바꾸니까 콜라이더가 어느 자식이든 “위로 올라가서” 데미지 스크립트를 찾음 → 구조가 달라도 무조건 찾음.

“이번에는 또 안 맞았고 / 어떤 스킬은 2배로 들어가던” 이유

증상:

R 스킬은 안 맞음

E 스킬만 맞음

어떤 상황에서 “안 맞는 스킬까지 포함해서” 데미지가 2배처럼 들어감.

원인 A: 같은 대상에게 두 경로로 데미지를 2번 줌

토네이도 코드에서 (수정 전/중간 과정에) 이런 구조가 섞였던 상태가 있었음:

col.GetComponentInParent()로 한 번 Apply

또 아래에서 root.GetComponentInChildren() 같은 걸로 한 번 더 Apply

즉 “한 프레임(또는 한 tick)”에 동일 몬스터에게 데미지 함수가 2번 호출될 수 있었고,
그래서 2배로 들어가는 느낌이 났던 거.

원인 B: DOT(틱) 시스템에서 “대상 식별 키”가 애매해져서 꼬임

너 코드에 id를 rb.GetInstanceID()로 쓰고, root는 rb.transform.root로 쓰는 등
대상을 구분하는 기준이 섞이면,

어떤 몬스터는 “이 rb”로 잡히고

어떤 몬스터는 “다른 rb(자식/부모)”로 또 잡혀서

틱 딕셔너리 _nextTickAt이 대상 1명을 1명으로 못 보고 2명처럼 다룰 수도 있음.
그럼 “다른 스킬도 같이 맞는 것처럼” 데미지가 더 들어가는 체감이 나올 수 있음

이번에 해결된 이유:

최종으로 만든 버전은 데미지를 넣는 위치를 한 곳으로 고정했고,
탐색도 col.GetComponentInParent()로 통일해서
“어떤 콜라이더/리짓바디가 잡혀도 같은 대상 처리”가 되면서 꼬임이 사라진 거임.

profile
아이디어 뱅크

0개의 댓글