오늘 한 일
기존 튜토리얼 고블린 3마리는 스킬을 맞았지만 다른 월드에 있는 고블린은 스킬을 맞지 않는 상태.
레이어를 빠뜨렸나? x
스크립트나 변수창에 빠진게 있나? x
컷씬 튜토리얼 부분에서 이동 로직이 이상해졌나? x
디버그를 찍어보자.
스킬 코드는 대략 이런 식:
OverlapSphere로 콜라이더들을 찾는다
그 다음 root.GetComponentInChildren() 또는 SendMessage 같은 걸로 데미지 적용한다.
“이번에는 또 안 맞았고 / 어떤 스킬은 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()로 통일해서
“어떤 콜라이더/리짓바디가 잡혀도 같은 대상 처리”가 되면서 꼬임이 사라진 거임.