TPS 개발 : 대쉬 넉백 — 스피어 콜리전과 채널 분리
대쉬로 적을 밀어내는 기능 — 방향 콜리전의 문제와 스피어 콜리전, 그리고 탄/대쉬 채널 분리
TPS 개발 : 대쉬 넉백 — 스피어 콜리전과 채널 분리
TPS 개발 - 대쉬 넉백
대쉬로 타쿠(적)들을 밀어내는 기능을 구현했다. 별거 아닐 줄 알았는데 콜리전 문제가 두 번 튀어나왔다.
1차 시도 — 대쉬 방향으로 콜리전 생성
처음엔 단순하게 갔다. 대쉬하는 방향으로 콜리전을 생성해서, 거기 걸리는 적들을 싹 밀어내고 날려버리는 방식.
1
2
3
대쉬 입력
└─ 대쉬 방향으로 긴 콜리전 생성
└─ 겹치는 타쿠 전부 넉백
문제 — 멀리 있는 애들이 미리 날아간다
방향으로 콜리전을 길게 뻗다 보니, 아직 도달하지도 않은 멀리 있는 적들이 미리 날아가는 이슈가 생겼다. 대쉬 경로 상에 있기만 하면 거리와 상관없이 넉백돼버린 것이다.
내가 아직 거기 안 갔는데 적이 먼저 날아가니 영 어색했다.
2차 시도 — 캐릭터에 스피어 콜리전
방향 콜리전을 버리고, 캐릭터에 스피어 콜리전 하나를 박아뒀다. 그리고 대쉬하면서 그 구체 안에 실제로 충돌하는 객체들만 날려보냈다.
1
2
캐릭터에 Sphere Collision 부착
└─ 대쉬 중 구체에 들어온 타쿠만 넉백
내 몸 주변에 실제로 닿은 적만 밀려나니, “내가 지나가면서 부딪힌 애들이 날아간다”는 자연스러운 느낌이 나왔다.
문제 — 총을 쏘니 대쉬가 맞는다
그런데 새 버그가 생겼다. 총을 쏘니까 대쉬 넉백이 발동하는 것이다.
원인은 콜리전 채널이었다. 탄 피격 판정과 대쉬 넉백 판정이 같은 채널을 공유하다 보니, 총알이 대쉬용 스피어 콜리전을 건드려서 엉뚱하게 넉백이 터졌다.
히트 판정 만들 때 채널 세팅으로 고생했는데, 여기서 또 채널이 발목을 잡았다.
해결 — 채널 분리
타쿠 탄 피격 전용 채널과 타쿠 대쉬 피격 전용 채널을 따로 팠다.
| 채널 | 용도 |
|---|---|
| 타쿠 탄 피격 채널 | 총알이 적을 맞추는 판정 |
| 타쿠 대쉬 피격 채널 | 대쉬 스피어가 적을 밀어내는 판정 |
이렇게 분리하니 탄으로는 대쉬 콜리전이 안 맞게 되어서, 총을 쏴도 넉백이 발동하지 않았다. 각 판정이 자기 채널만 신경 쓰면 되니 서로 간섭이 사라졌다.
오늘 정리
- 대쉬 방향 콜리전 → 멀리 있는 적이 미리 날아가는 문제
- 캐릭터에 스피어 콜리전을 박아 실제 충돌한 적만 넉백
- 탄과 대쉬가 같은 채널을 공유해 총 쏘면 넉백되는 버그
- 탄 피격 채널 / 대쉬 피격 채널 분리로 간섭 제거
This post is licensed under CC BY 4.0 by the author.